我有一个包含结构的元素的矢量:坏分配具有更大的数据
struct hairParticle{
bool seed;
double mass;
double diameter;
double stiffnessCoeff;
double bendingCoeff;
double frictionCoeff;
glm::vec3 position;
glm::vec3 velocity;
glm::vec3 force;
std::vector<glm::vec3> direction;
std::vector<unsigned int> neighbours;
std::vector<double> neighbourRestingLengths;
};
当我尝试用数据填充这个矢量,它正常工作与约1000个条目,但约3000程序崩溃,内存分配不当。 我不知道是什么导致this.After一些谷歌上搜索,我发现这个:
http://www.cplusplus.com/forum/general/13653/
和电脑说,这个结构的大小为120个字节,想必不考虑内部向量的大小,但现在它们的大小不超过10个元素。所以即使每个3000个元素有200个字节,最大内存4GB也应该足够了。
另一种解决方案是使用deque代替vector,但据我了解(也许是错误的),deque不适合索引,我真的需要能够尽可能快地访问任何元素。尽管我需要更改内部向量,但我认为它们作为指针存储在结构体中,这意味着整个向量(这些结构体元素)在内部向量更改后不需要重新分配内存(也许我错了)。
我在窗口上使用Code :: Blocks。
有没有人有一个想法,是什么原因导致这个错误,我怎么能解决这个问题 - 我想保持矢量容器,但不强求:) 感谢
每个有多大在结构底部的向量? – 2013-04-27 22:51:22
你为什么认为你的程序实际上可以分配4GB的内存?在Windows上,默认情况下可以获得2GB的地址空间,3个可以使用编译器标志和OS设置。 – 2013-04-27 23:07:48
@Mats Peterson谢谢,我得到的这个错误实际上是,在初始化phaze期间,矢量方向的大小为1,而邻居和neighbourDirections的大小都是2.看着我的代码,我意识到我实际上可以为整个矢量,我做了,它为更多的元素工作,但肯定不超过一百万,它不能通过50000. – user2327838 2013-04-28 09:03:43