C++ 更改声明顺序时输出不正确
Sutherland-Hodgeman多边形裁剪的实现。这两条语句的声明顺序给出了正确的输出,反之亦然C++ 更改声明顺序时输出不正确,c++,opengl,global-variables,C++,Opengl,Global Variables,Sutherland-Hodgeman多边形裁剪的实现。这两条语句的声明顺序给出了正确的输出,反之亦然 int numberOfVertices = 5; Point pointList[] = { {50,50}, {200,300}, {310,110}, {130,90}, {70,40} }; 声明反转时出现的确切错误是,底部剪裁器生成一组空顶点,因此剪裁后不会显示多边形 这个错误的原因是什么 代码: #包括 #包括 #定义最大顶点10 #定义左0 #定义权利1 #定义前2名 #定义底
int numberOfVertices = 5;
Point pointList[] = { {50,50}, {200,300}, {310,110}, {130,90}, {70,40} };
声明反转时出现的确切错误是,底部剪裁器生成一组空顶点,因此剪裁后不会显示多边形
这个错误的原因是什么
代码:
#包括
#包括
#定义最大顶点10
#定义左0
#定义权利1
#定义前2名
#定义底部3
使用名称空间std;
/*剪辑窗口*/
结构窗口{
双xmin;
双xmax;
双ymin;
双ymax;
};
结构点{
双x;
双y;
};
/*如果我交换这两行代码,代码就不起作用了*/
/**************/
int numberoftexts=5;
点列表[]={50,50},{200300},{310110},{130,90},{70,40};
/**************/
常数窗口w={100400,60200};
/*检查点是在窗侧的内侧还是外侧*/
内部isInside(点p,内部侧){
开关(侧){
案例左:
返回p.x>=w.xmin;
案例权利:
return p.x您有一个内存跺脚错误--您正在使用一个无效的索引编写点列表
数组,该数组随后会立即覆盖内存。您的原始代码恰好可以工作,因为没有使用内存,但是当您切换声明顺序时,内存跺脚会覆盖变量顶点数
我建议您使用Valgrind运行您的程序,以查找内存阻塞发生的位置。In
if(isInside(p, sideToClip)) {
/* p inside */
if(!isInside(s, sideToClip)) {
/* p inside, s outside */
outputList[j] = intersection(p, s, sideToClip);
j++;
}
outputList[j] = p;
j++;
}
else if(isInside(s, sideToClip)) {
}
s = p;
}
/* Updating number of points and point list */
numberOfVertices = j;
for(i=0 ; i<numberOfVertices ; i++) {
pointList[i] = outputList[i];
}
有足够的空间。你真的调试过这个intersection()方法吗?看起来太错了…-1代表代码的巨大墙和“Debug plix”。
if(isInside(p, sideToClip)) {
/* p inside */
if(!isInside(s, sideToClip)) {
/* p inside, s outside */
outputList[j] = intersection(p, s, sideToClip);
j++;
}
outputList[j] = p;
j++;
}
else if(isInside(s, sideToClip)) {
}
s = p;
}
/* Updating number of points and point list */
numberOfVertices = j;
for(i=0 ; i<numberOfVertices ; i++) {
pointList[i] = outputList[i];
}
Point pointList[MAXVERTICES] = { ... };