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

C语言show_result函数触发0xC0000005访问违例异常求助

解决C程序show_result函数的0xC0000005访问违规异常

先搞懂错误和反向引用的意思

  • 0xC0000005是Windows系统的访问违规错误,说白了就是你的程序试图读取一块根本不属于它、甚至不存在的内存。
  • 0xFFFFFFFFFFFFFFFF是64位系统里的无效指针地址,通常是指针被错误赋值(比如空指针被乱改、未初始化的指针)导致的。
  • 你说的「反向引用」就是用*指针变量或者指针变量->成员的方式,去访问指针指向的内存内容。比如*p是取p指向的内存值,res->name是取res指针指向的结构体里的name成员,这俩都是反向引用操作。如果指针本身是无效的(比如0xFFFFFFFFFFFFFFFF),反向引用时就会触发这个错误。

新手快速排查步骤

  • 第一步:打开show_result函数代码,把里面所有用*或者->的地方标出来,这些就是可能出问题的反向引用点。
  • 第二步:检查调用show_result时传入的参数是不是空指针(NULL),或者有没有被错误初始化。比如你可能直接传了一个没赋值的指针变量,或者不小心传了NULL。
  • 第三步:检查show_result函数内部有没有自己定义的指针,是不是没分配内存就去反向引用了。比如声明了char* str;后直接用printf("%s", str);,str没赋值就是无效指针,必然报错。
  • 第四步:用调试工具(比如VS的调试模式),在show_result第一行加断点,运行到断点时查看所有指针变量的值。如果某个指针的值是0xFFFFFFFFFFFFFFFF或者0(NULL),那就是它导致的问题。

典型错误示例

比如你的代码是这样的:

typedef struct {
    int score;
    char* name;
} Student;

void show_result(Student* stu) {
    printf("姓名:%s,分数:%d\n", stu->name, stu->score); // 这里的stu->就是反向引用
}

int main() {
    Student* p; // 只声明指针,没初始化也没分配内存
    show_result(p); // 传入无效指针,触发错误
    return 0;
}

这里的p是未初始化的指针,值可能就是0xFFFFFFFFFFFFFFFF,调用show_result后反向引用stu->name就会触发你遇到的错误。解决办法是给p分配内存:p = (Student*)malloc(sizeof(Student));,或者直接用栈上的变量:Student s; show_result(&s);。

内容的提问来源于stack exchange,提问作者프린이

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:45:34