You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写窗口创建代码触发Access violation写入错误的求助

问题分析与解决

核心错误点

  1. 函数调用无效:你在Prepare_Screen里写的MakeBitMap不是合法的函数调用——既没有加括号,也没传入要求的DWORD**类型参数,等于完全没执行这个函数的逻辑。
  2. 空指针写入:崩溃提示Access violation writing location 0x0000000000000000,说明ws_cpy是未初始化的空指针。你直接给它的第一个元素赋值,等于尝试写入系统保护的无效内存地址0,触发了访问违例。

修正方案

第一步:修复ws_cpy的内存分配

如果ws_cpy是全局或局部指针,必须先为它分配合法的内存空间,示例如下:

#include <stdlib.h> // 包含malloc所需的头文件

DWORD* ws_cpy; // 假设是全局指针

void MakeBitMap(DWORD** window_p) { 
    // 分配至少1个DWORD大小的内存
    ws_cpy = (DWORD*)malloc(sizeof(DWORD));
    if (ws_cpy == NULL) {
        // 处理内存分配失败的情况,比如直接返回
        return;
    }
    ws_cpy[0] = 0x0000aaff; 
}

第二步:修复函数调用逻辑

在Prepare_Screen里正确调用MakeBitMap,传递符合参数类型要求的值:

void Prepare_Screen(HWND hWnd){
    DWORD* screen_ptr = NULL;
    // 传递指针的地址,满足DWORD**的参数类型要求
    MakeBitMap(&screen_ptr);
}

额外说明

你提到以为只有window_p被解引用,但当前代码里MakeBitMap根本没用到这个参数,它目前是多余的。如果你的原本逻辑是让调用方通过window_p拿到ws_cpy的地址,可以在函数里加上*window_p = ws_cpy;,这样调用后screen_ptr就会指向分配好的内存。

内容的提问来源于stack exchange,提问作者Dom Da Bomb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 15:31:08