我是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
答案 0 :(得分:2)
访问冲突或分段错误表示您的程序试图访问范围内未保留的内存。
举几个例子来说明如何实现这个目标:
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
调试。