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;
}