读取对象数组的c ++会导致SIGSEGV

m93*_*93a 1 c++ arrays object segmentation-fault

我有两个类:Vector和Particle ......

class Vector {
public:
    float x,y;
};

class Particle {
public:
    Vector* coord;
    Particle(Vector* coord)
    {
        this->coord = coord;
    };
};
Run Code Online (Sandbox Code Playgroud)

...和一个像这样声明的数组:

Particle* particles [PARTICLES];
Run Code Online (Sandbox Code Playgroud)

这是我的主要内容:

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;
}
Run Code Online (Sandbox Code Playgroud)

每当粒子> 1时抛出SIGSEGV.评论说FIXME系列可以正常工作而不会出错.

完整代码:http://codepad.org/dI2ve5Pc

为什么它会失败并且有办法解决它?

谢谢 :)

apa*_*gin 7

循环写错了.j在内循环的第二次迭代之前不复位.为什么不像大多数人通常那样对循环进行编码:

for (i = 0; i < PARTICLES; i++) {
    for (j = 0; j < PARTICLES; j++) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)