Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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++ 堆栈cookie检测代码检测到基于堆栈的缓冲区溢出-已修复_C++_Image Processing_Buffer Overrun_Pixelate_Stack Based - Fatal编程技术网

C++ 堆栈cookie检测代码检测到基于堆栈的缓冲区溢出-已修复

C++ 堆栈cookie检测代码检测到基于堆栈的缓冲区溢出-已修复,c++,image-processing,buffer-overrun,pixelate,stack-based,C++,Image Processing,Buffer Overrun,Pixelate,Stack Based,所以我对这个用于像素化图像的程序有一些问题。一个问题是,我得到了一个“围绕变量'pixArray'的堆栈已损坏”,然后,当我在中断后单击continue时,它在标题中给出了错误 我不确定使用pastebin是否可以接受,但我会使用它,因为我有一篇“简短”的帖子 此外,当它穿过时,所有像素化的正方形在正方形的左侧和顶部都短了一个像素。当它写入输出文件时,它只是使用原始数据。如果你能找出为什么会发生这种情况,你会得到额外的分数 最后,平均值似乎没有正确平均,正如运行程序后图像最右侧周围的正方形所

所以我对这个用于像素化图像的程序有一些问题。一个问题是,我得到了一个“围绕变量'pixArray'的堆栈已损坏”,然后,当我在中断后单击continue时,它在标题中给出了错误

我不确定使用pastebin是否可以接受,但我会使用它,因为我有一篇“简短”的帖子

此外,当它穿过时,所有像素化的正方形在正方形的左侧和顶部都短了一个像素。当它写入输出文件时,它只是使用原始数据。如果你能找出为什么会发生这种情况,你会得到额外的分数

最后,平均值似乎没有正确平均,正如运行程序后图像最右侧周围的正方形所示

如果您能帮助解决这些问题,我们将不胜感激。提前谢谢

编辑:我对代码进行了排序,注释掉了使用
pixArray
的部分,注释掉后修复问题的部分位于函数的底部,
getAveragesForRGB

start = 0;//reset start number
for(int row = 0; row < squareSize; row++) {
    if(row != 0)
        start = ((square * MAXROWS) / (MAXCOLS / squareSize)) + 1;
    stop = (((square + 1) * MAXROWS) / (MAXCOLS / squareSize));
    for (int col = start; col < stop; col++) {
        //write each average into each piece of the array
        pixArray[row][col].red = redAvg;
        pixArray[row][col].green = greenAvg;
        pixArray[row][col].blue = blueAvg;
    }
}

似乎您正在覆盖某个函数中的本地数组。仔细检查所有循环限制。SO上没有人会在300多行代码上玩“发现错误”。简化您的代码,直到它仍然产生错误,但没有所有的“额外”代码。特别是代码中有十几种“pixArray”的用法,很难说是哪个函数导致了问题。这是一个非常好的观点。很抱歉。万一有人来了,我从VS2010改为VS2012时遇到了一个看似罕见的错误,没有升级我的DLL。特别是在SFML中。
void getAveragesForRGB(Pixel pixArray[][MAXCOLS], int squareSize, int square, int numSquaresPerStripe) {

    //initialize variables needed for function
    int start, stop;
    int redAvg, greenAvg, blueAvg;

    //reset averages for current square's usage
    redAvg = 0;
    greenAvg = 0;
    blueAvg = 0;

    start = 0; //reset start number
    for (int row=0; row < squareSize; row++) {
        if (row != 0)
            start = ((square * MAXROWS) / (MAXCOLS / squareSize)) - 1;  //starting point for loop over the columns
        stop = start + squareSize;//stopping point for   ^^^
        for (int col = start; col < stop - 1; col++) {
            //add each rgb value to the sum to be divided later
            redAvg += pixArray[row][col].red;
            greenAvg += pixArray[row][col].green;
            blueAvg += pixArray[row][col].blue;
        }
    }

    //divide by number of pixels in square for average
    redAvg /= (squareSize * squareSize);
    greenAvg /= (squareSize * squareSize);
    blueAvg /= (squareSize * squareSize);


    start = 0;//reset start number
    for (int row = 0; row < squareSize; row++) {
        if (row != 0)
            start = ((square * MAXROWS) / (MAXCOLS / squareSize)) - 1;  //starting point for loop over the columns
        stop = (((square + 1) * MAXROWS) / (MAXCOLS / squareSize));  //stopping point for   ^^^
        for (int col = start; col < stop - 1; col++) {
            //write each average into each piece of the array
            pixArray[row][col].red = redAvg;
            pixArray[row][col].green = greenAvg;
            pixArray[row][col].blue = blueAvg;
        }
    }
}