Что означает нарушение доступа?

Я новичок в C++ и не понимаю, почему я получаю сообщение об ошибке "Расположение чтения нарушения доступа". Вот мой код:

gdiscreen();
int startX = 1823 - minusX;
int startY = 915 - minusY;
for (int i = startX; i < startX + 61; i++)
{
    for (int j = startY; j < startY + 70; j++)
    {
        Color pixelColor;
        bitmap->GetPixel(i, j, &pixelColor);
        cout << pixelColor.GetValue() << " ";
    }
    cout << endl;
}

gdiscreen () можно найти здесь: http://forums.codeguru.com/showthread.php?476912-GDI-screenshot-save-to-JPG

1 ответ

Нарушение доступа или ошибка сегментации означает, что ваша программа пыталась получить доступ к памяти, которая не была зарезервирована в области.
Есть несколько примеров, как этого добиться:

Оставляя границы массива:

int arr[10];
for(unsigned char i=0; i<=10; i++)  //Will throw this error at i=10
    arr[i]=0;

Примечание: в приведенном выше коде я использую unsigned char повторять. Char - это один байт, поэтому unsigned char 0-255. Для больших номеров вам может понадобиться unsigned short (2 байта) или unsigned int (4 байта).

Случайный расчет с указателем вместо целого

int ah = 10;
int *pointer = &ah;   //For some reason, we need pointer
pointer++;   //We should've written this: (*pointer)++ to iterate value, not the pointer
std::cout<<"My number:"<<*pointer<<'\n';  //Error - accessing ints address+1

Я намеренно начал с широкого объяснения. Вы хотели знать, что такое нарушение доступа в первую очередь. В вашем конкретном коде я уверен, что вы напутали с i а также j границы. Сделать некоторые std::cout отладки.

Другие вопросы по тегам