C++读取对象数组导致SIGSEV
我有两类:向量和粒子C++读取对象数组导致SIGSEV,c++,arrays,object,segmentation-fault,C++,Arrays,Object,Segmentation Fault,我有两类:向量和粒子 class Vector { public: float x,y; }; class Particle { public: Vector* coord; Particle(Vector* coord) { this->coord = coord; }; }; 。。。一个数组声明如下: Particle* particles [PARTICLES]; 这是我的主要观点: int main(int argc,
class Vector {
public:
float x,y;
};
class Particle {
public:
Vector* coord;
Particle(Vector* coord)
{
this->coord = coord;
};
};
。。。一个数组声明如下:
Particle* particles [PARTICLES];
这是我的主要观点:
int main(int argc, char** argv)
{
//Write
int i = 0;
do{
particles[i] = new Particle(new Vector());
}while(
++i<PARTICLES
);
i = 0;
//Read
int j = 0;
float s = .0f,
a = .0f;
Vector vi = *(particles[0]->coord),
vj = *(particles[0]->coord);
do{
do{
if(i!=j){
vi = *(particles[i]->coord);
vj = *(particles[j]->coord); //FIXME
}
}while(
++j<PARTICLES //For values >1 throws SIGSEGV
);
}while(
++i<PARTICLES
);
return 0;
}
每当粒子>1时,将抛出SIGSEGV。注释出FIXME行可以使它无误地工作
完整代码如下:
为什么它会失败?有没有办法修复它
谢谢:循环写入错误。在内部循环的第二次迭代之前,j不会重置。为什么不像大多数人通常做的那样对循环进行编码:
for (i = 0; i < PARTICLES; i++) {
for (j = 0; j < PARTICLES; j++) {
// ...
}
}
循环写入错误。在内部循环的第二次迭代之前,j不会重置。为什么不像大多数人通常做的那样对循环进行编码:
for (i = 0; i < PARTICLES; i++) {
for (j = 0; j < PARTICLES; j++) {
// ...
}
}
记住在每次重复j循环后将j重置为0:
记住在每次重复j循环后将j重置为0:
我正在使用gpp编译,使用以下命令:g++teh_problem.cpp-o解决问题的方法是使用手动内存管理退出,并开始使用std::vector。为什么在循环编码时首先使用std::vector会让我头晕目眩?为什么不在循环中简单地增加i?为什么要让它成为while条件的一部分?你有没有使用C++来代替C++的特殊原因?当然,你不应该为一个点坐标向量命名你的类。有一个名为vector的标准库类,应该用于粒子数组。您不应该对coord成员变量使用动态内存。这只会给你带来不可读性和内存管理的噩梦。我正在用gpp编译这个命令:g++teh_problem.cpp-o解决这个问题的方法是停止使用手动内存管理,开始使用std::vector。为什么先用循环编码的方式让我头晕目眩?为什么不在循环中简单地增加i?为什么要让它成为while条件的一部分?你有没有使用C++来代替C++的特殊原因?当然,你不应该为一个点坐标向量命名你的类。有一个名为vector的标准库类,应该用于粒子数组。您不应该对coord成员变量使用动态内存。这只会给你带来不可读性和内存管理的噩梦。