我编写了一些代码来创建一个窗口,这是为其着色的部分,但是当我运行它时,它崩溃并出现错误:
访问冲突写入位置 0x0000000000000000
DWORD* ws_cpy = *window_p; //makes a local copy of the mapbit
int mapsize = width * height;
for (int c = 0; c < mapsize; c++) {
ws_cpy[c] = 0x0000aaff; //make the screen coloor 00aaff plus alpha
}
我看到另一篇文章和答案正在谈论“取消引用尚未初始化的指针”,但我拥有的唯一取消引用的对象是“window_p”,它定义在:
void MakeBitMap(HWND hWnd, HBITMAP* bitmap, BITMAPINFO Bmi, DWORD** window_p, int width, int height)
window_p
所在的函数是。
我真的不知道该怎么办。
地址 0 处的 AV 表示您正在通过空指针访问内存。
在所示代码中,访问
wc_cpy
时的 AV 意味着 window_p
指向空指针。 IOW,MakeBitMap()
的调用者正在按照以下方式做一些事情:
DWORD* window_p = nullptr;
MakeBitMap(..., &window_p, ...);
您需要先指向有效的内存,然后才能写入,例如:
DWORD* window_p = ...; // some valid allocated memory
...
MakeBitMap(..., &window_p, ...);
...
// free memory pointed at by window_p when done using it...
或者:
void MakeBitMap(HWND hWnd, HBITMAP* bitmap, BITMAPINFO Bmi, DWORD** window_p, int width, int height)
{
*window_p = ...; // some valid allocated memory
...
}
DWORD* window_p = nullptr;
MakeBitMap(..., &window_p, ...);
...
// free memory pointed at by window_p when done using it...