Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改声明顺序时输出不正确_C++_Opengl_Global Variables - Fatal编程技术网

C++ 更改声明顺序时输出不正确

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名 #定义底

Sutherland-Hodgeman多边形裁剪的实现。这两条语句的声明顺序给出了正确的输出,反之亦然

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] = { ... };