2012-08-11 161 views
0

我正在尝试使用模拟递归版本的迭代算法实现Sierpinski垫片。无法访问内存,分段错误

我收到了分段错误。可能该函数试图取消引用NULL指针,但我找不到它。问题应该在if块中不在其他地方。因为如果它跳过if块,它工作正常。谢谢你的帮助。

GLfloat points[18*(3^GENCOUNT)]; 

std::stack<Pyramid *> Q; 

// initial Pyramid 
Q.push(new Pyramid(Vec3(0.0f, 0.4f, 0.0f), 
        Vec3(-0.4f, -0.4f, 0.4f), 
        Vec3(0.4f, -0.4f, 0.4f), 
        Vec3(0.4f, -0.4f, -0.4f), 
        Vec3(-0.4f, -0.4f, -0.4f), 0)); 

int i = 0; 
while(!Q.empty()) 
{ 
    Pyramid *topPyr = Q.top(); 
    Q.pop(); 

    if(topPyr->mGeneration < GENCOUNT) 
    { 
     Vec3 baseVec3 = (((topPyr->mV2+topPyr->mV3)/2.0f) + ((topPyr->mV4+topPyr->mV5)/2.0f))/2.0f; 

     Q.push(new Pyramid(topPyr->mV1, 
          (topPyr->mV1+topPyr->mV2)/2.0f, 
          (topPyr->mV1+topPyr->mV3)/2.0f, 
          (topPyr->mV1+topPyr->mV4)/2.0f, 
          (topPyr->mV1+topPyr->mV5)/2.0f, topPyr->mGeneration+1)); 
     Q.push(new Pyramid((topPyr->mV1+topPyr->mV2)/2.0f, 
          topPyr->mV2, 
          (topPyr->mV2+topPyr->mV3)/2.0f, 
          baseVec3, 
          (topPyr->mV2+topPyr->mV5)/2.0f, topPyr->mGeneration+1)); 
     Q.push(new Pyramid((topPyr->mV1+topPyr->mV3)/2.0f, 
          (topPyr->mV2+topPyr->mV3)/2.0f, 
          topPyr->mV3, 
          (topPyr->mV3+topPyr->mV4)/2.0f, 
          baseVec3, topPyr->mGeneration+1)); 
     Q.push(new Pyramid((topPyr->mV1+topPyr->mV4)/2.0f, 
          baseVec3, 
          (topPyr->mV3+topPyr->mV4)/2.0f, 
          topPyr->mV4, 
          (topPyr->mV4+topPyr->mV5)/2.0f, topPyr->mGeneration+1)); 
     Q.push(new Pyramid((topPyr->mV1+topPyr->mV5)/2.0f, 
          (topPyr->mV2+topPyr->mV5)/2.0f, 
          baseVec3, 
          (topPyr->mV4+topPyr->mV5)/2.0f, 
          topPyr->mV5, topPyr->mGeneration+1)); 
    } 
    else 
    { 
     memcpy(points+i, topPyr->mV1.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV2.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV3.mVec3, sizeof(GLfloat)*3);i+=3; 

     memcpy(points+i, topPyr->mV1.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV3.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV4.mVec3, sizeof(GLfloat)*3);i+=3; 

     memcpy(points+i, topPyr->mV1.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV4.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV5.mVec3, sizeof(GLfloat)*3);i+=3; 

     memcpy(points+i, topPyr->mV1.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV5.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV2.mVec3, sizeof(GLfloat)*3);i+=3; 

     memcpy(points+i, topPyr->mV2.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV3.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV4.mVec3, sizeof(GLfloat)*3);i+=3; 

     memcpy(points+i, topPyr->mV4.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV5.mVec3, sizeof(GLfloat)*3);i+=3; 
     memcpy(points+i, topPyr->mV2.mVec3, sizeof(GLfloat)*3);i+=3; 
    } 
    delete topPyr; 
} 

回答

0

我的C++很生疏,但假设没有操作符重载正在发生的事情,在你的第一个行不

3^GENCOUNT 

意味着“3 GENCOUNT之间的按位异或”?我敢肯定你的意思是指数,即3代表发电的力量。