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

C++中delete关键字触发Unknown Signal错误排查求助

动态数组pop方法的内存错误分析与修复

你的问题出在内存管理API混用和pop逻辑错误两个关键点:

  • C/C++内存管理函数不能混用:你用C的malloc/realloc分配内存,却用C++的delete释放单个元素。这两类API的内存管理机制完全不同,malloc分配的内存必须用free释放,new分配的才用delete,混用会直接触发内存错误。

  • 单个元素不能单独释放连续堆内存:ptr指向的是一块连续的堆内存块,由realloc整体分配/扩容,你不能用delete单独释放其中某一个元素的内存——这种操作属于非法内存访问,必然导致程序崩溃。

修复后的pop方法代码

把pop里的delete替换成realloc来缩小整个数组的内存块:

T pop() {
    T temp = get(--size);
    // 重新分配缩小后的内存块,size已经减1
    ptr = (T*) realloc(ptr, size * sizeof(T));
    return temp;
}

额外提醒

如果是C++开发,更推荐使用new/delete系列操作(而非malloc/realloc),尤其是当数组存储自定义类型时:

  • malloc只会分配原始内存,不会调用对象的构造函数
  • free只会释放内存,不会调用对象的析构函数
    这会导致自定义类型的对象无法正确初始化或销毁,引发更隐蔽的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:22:43