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

C++类构造函数中为char指针数组赋值触发EXC_BAD_ACCESS错误如何解决

问题根因

报错EXC_BAD_ACCESS (code=1, address=0x0)是空指针解引用的典型表现:你仅声明了char *cardNumber字符指针,未为其分配对应大小的内存空间就直接通过下标访问赋值,操作了非法的内存地址。

修复方案
  • 第一步:构造函数中先为cardNumber分配堆内存,再执行赋值操作,修改后的构造函数示例:
CreditCardInfo(){
    name = "none";
    // 新增内存分配逻辑,大小匹配你定义的numDigit值
    cardNumber = new char[numDigit];
    for (int i = 0; i < numDigit; i++) {
        cardNumber[i] = ' ';
    }
    cvv = 0;
    address = "none";
}
  • 第二步:补充析构函数释放内存,避免内存泄漏,在类中新增析构函数:
~CreditCardInfo(){
    delete[] cardNumber;
    cardNumber = nullptr;
}
  • 可选优化:如果不需要手动管理内存,可直接将cardNumber的类型改为std::string,无需手动分配/释放内存,操作更安全:
// 成员变量修改为
string cardNumber;
// 构造函数可直接初始化指定长度的空格字符串
CreditCardInfo(): cardNumber(20, ' ') {
    name = "none";
    cvv = 0;
    address = "none";
}
注意事项
  • 如果你后续自定义了拷贝构造、拷贝赋值函数,需要遵循C++三五法则,手动实现深拷贝逻辑,避免指针浅拷贝导致的重复释放问题。
  • 生产环境中禁止明文存储信用卡卡号、CVV这类敏感信息,需做合规加密处理。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:06:02