Код инструментария cookie стека обнаружил переполнение буфера в стеке — Исправлено

поэтому у меня есть несколько проблем с этой программой, используемой для пикселирования изображения. Одной из проблем является то, что я получаю «Стек вокруг переменной« pixArray »был поврежден», а затем, когда я нажимаю продолжить после разрыва, выдает ошибку в заголовке.

Я не уверен, допустимо ли использовать pastebin, но я буду использовать его ради «короткого» поста.

Код

Используемое изображение

Кроме того, когда он проходит, все пикселированные квадраты на один пиксель слишком короткие слева и сверху квадратов. Он просто использует исходные данные при записи в outFile. Если вы попытаетесь выяснить, почему это происходит, вы получите бонусные баллы.

Наконец, средние значения, похоже, не усредняются правильно, как вы можете видеть по квадратам вокруг самой правой стороны изображения после запуска программы.

Любая помощь с любой из этих проблем будет принята с благодарностью. Заранее спасибо!

РЕДАКТИРОВАТЬ: Я перебрал код, комментируя разделы, которые используют 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;
}
}

РЕДАКТИРОВАТЬ 2: Теперь все прошло гладко. На всякий случай, когда кто-нибудь столкнется с этой проблемой для без разницы причина, вот новая getAveragesForRGB где все мои проблемы были.

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

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]