error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x10).

遇到这个问题

error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x10).
The process has been returned to the state before expression evaluation.

EXC_BAD_ACCESS 是一个在 macOSiOS 系统上常见的运行时错误,它通常表示你的程序试图访问它没有权限访问的内存区域,或者访问了一个已经被释放(deallocated)的对象。code=1 通常指的是“非法地址”,即你的程序试图访问一个它根本不应该访问的内存地址

这个错误通常是由以下几种情况之一引起的:

  • 野指针(Dangling Pointer):你有一个指针变量,它指向的内存已经被释放了,但你没有将指针设置为 NULL,随后又试图通过这个指针访问内存。
  • 越界访问(Buffer Overflow):比如你有一个数组,但你的代码试图访问数组索引超出其实际大小的元素。
  • 未初始化的指针:你声明了一个指针变量但没有给它分配内存,或者没有将它指向一个有效的内存地址,然后就试图通过它来访问内存。
  • 多线程竞争条件:在多线程环境中,如果没有适当的同步机制,一个线程可能正在访问或修改另一个线程正在使用的数据。

我是在行报错的:

for (size_t i = 0; i < this->xxxxxxx.size(); ++i) {

野指针 / 越界 / 多线程显然都不存在,只能是 this->xxxxxxx 没有初始化

class XXX {
public:
    XXX();
    virtual ~XXX() {}

// private:
    std::vector<double> xxxxxxx;

这个类创建的话,xxxxxxx 这个 vector 就应该进行了默认初始化,但是会报错,也就是有可能这个类没有被初始化

我在其构造函数中打了断点,但并没有经过,确认了是该类没有被正确初始化

最终,定位到问题是:

class A {
	XXX* x;
}

A 只持有了一个 XXX 类型的指针 x,但在 A 的构造函数中并未执行:

x = new XXX(...);

所以在Ax并未得到初始化,只是一个野指针,所以x->xxxxxxx.size() 就是一个野指针在操作,故报错

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值