Я новичок в 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 · рейтинг 2 · Tomáš Zato - Reinstate Monica
Нарушение прав доступа или ошибка сегментации означает, что ваша программа пыталась получить доступ к памяти, которая не была зарезервирована в области действия.
Приведите несколько примеров, как этого добиться:
Выход за границы массива
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 отладку.