Я пишу программу, которая должна создавать случайные ячейки в случайном месте в окне 640x480. Когда я запускаю следующий код, возникает ошибка сегментации. Проблема заключается в двух циклах for. Segfault обычно встречается во вложенном цикле «for» с startx. Я подозреваю, что переполнение буфера, но не знаю, как сделать менее громоздкий код.Сегментация Fault 11 redux
//Globals
int width, height;
int endx, endy, starty, startx, randEnd, randStartX, randStartY;
unsigned char *pixmap;
void setPixels(){
for (int j = 1; j<100; j++) { // j == j-1 # of boxes
randStartX = rand() % width; // random # btw 0 and width
randStartY = rand() % height; // random # btw 0 and height
randEnd = 1 + (rand() % 100); // random # btw 0 - 100, not allowing box > 100.
startx = randStartX;
starty = randStartY;
endx = startx + randEnd;
endy = starty + randEnd;
for(int y = starty; y < endy; y++) { // first y coordinate of box
for(int x = startx; x < endx; x++) { // first x coordinate of box
cout << "endx = " << endx << endl;
int i = (y * width + x) * 3; // movement upwards for each pixel
pixmap[i++] = 0x00; //Increments i by one to move to the next part of pixel.
pixmap[i++] = 0xFF;
pixmap[i] = 0x00;
}
}
}
}
int main(int argc, char *argv[])
{
//initialize the global variables
srand (time(0));
width = 640;
height = 480;
pixmap = new unsigned char[width * height * 3];
setPixels(); // write code like ./pr01 red, etc.
glutInit(&argc, argv);
glutInitWindowPosition(100, 100); // Where the window will display on-screen.
glutInitWindowSize(width, height);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutCreateWindow("Assignment 01");
init();
glutReshapeFunc(windowResize);
glutDisplayFunc(windowDisplay);
glutMouseFunc(handleButton);
glutMainLoop();
return 0;
}
Любая идея, что может быть причиной этого? Существуют ли вопиющие логические проблемы? Заранее спасибо.
Можете ли вы показать объявление «pixmap» и код, который его инициализирует? –
Что означает «объемный код» для переполнения буфера? Просто убедитесь, что вы выделили нужное количество пространства в 'pixmap'. – Barmar
Что такое 'width' и' height'? Похоже, вы можете создать поле с 'starty == height-1' и' endy == starty + randEnd', width 'randEnd> 0', что приведет к записи за пределами буфера. –