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
相关产品推荐
相关产品推荐

