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

C++运行抛出0xC0000005访问0地址违规错误是什么原因?

异常根因排查与修复方案

你遇到的0xC0000005访问违例是strlen接收了空指针参数导致的,空指针来源于代码里的多个语法&语义错误:

1 核心触发问题:无参构造函数指针赋值错误

你写的无参构造代码存在逻辑错误:

MyString()
    :str{nullptr}
{
    str = new char[1];
    str = '\0'; // 错误行:直接修改指针本身的值,把刚分配到的内存地址覆盖为0,相当于把str设为空指针
}

这里应该是给str指向的内存空间赋值终止符,而非修改指针本身,修正如下:

MyString()
    :str{nullptr}
{
    str = new char[1];
    *str = '\0'; // 正确写法:对指针解引用后给指向的第一个字节赋值'\0'
}

2 其他隐藏风险问题

  • 内存分配释放不匹配:你所有内存都用new[]分配,但析构函数用delete释放,属于未定义行为,会引发内存泄漏、随机崩溃等问题,修正为:
~MyString() { delete[] str; }
  • get_string方法语义错误:当前返回值为char只能拿到字符串首字符,如果你需要返回完整C风格字符串,修正为:
const char* get_string() const { return str; }

排查思路总结

  • 遇到Access violation reading location 0x00000000类错误时,第一时间检查对应访问位置的指针是否为空,可直接在崩溃行打断点查看指针变量的值快速定位。
  • 动态内存操作要严格遵循new配delete、new[]配delete[]的规则。

内容的提问来源于stack exchange,提问作者Ioan Săsărman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:03