错误访问冲突写入位置 0x0000000000000000

问题描述 投票:0回答:1

我编写了一些代码来创建一个窗口,这是为其着色的部分,但是当我运行它时,它崩溃并出现错误:

访问冲突写入位置 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
所在的函数是。

我真的不知道该怎么办。

c++ graphics window
1个回答
0
投票

地址 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...
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.