【发布时间】:2014-04-25 20:38:20
【问题描述】:
我有两个类:Vector 和 Particle...
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;
}
只要 PARTICLES >1,就会抛出一个 SIGSEGV。注释掉 FIXME 行使其正常工作。
完整代码在这里:http://codepad.org/dI2ve5Pc
为什么会失败,有没有办法修复它?
谢谢你:)
【问题讨论】:
-
我正在使用 gpp 编译使用这个命令:
g++ teh_problem.cpp -o out -
解决问题的方法是使用手动内存管理退出并开始使用
std::vector。 -
为什么第一个
do-while循环的编码方式让我头晕目眩?为什么不在循环中简单地增加i?为什么让它成为while条件的一部分? -
您使用 c-with 类而不是 c++ 是否有特殊原因?
-
你当然不应该将你的类命名为点坐标
Vector。有一个名为vector的标准库类,您应该将其用于您的粒子数组。而且您不应该为coord成员变量使用动态内存。这只会给你带来不可读性和内存管理的噩梦。
标签: c++ arrays object segmentation-fault