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

动态内存分配技术疑问:指针赋值与内存释放相关问题

int *firstArray = new int[10];
int *secondArray = new int[20];

firstArray = secondArray;
问题解答

1. 尽管两个数组大小不同,表达式firstArray = secondArray;是否安全?

语法上合法,所以编译器不会报错,但逻辑上完全不安全:

  • 赋值后,firstArray原本指向的10个int的内存块会彻底丢失,再也无法释放,直接造成内存泄漏。
  • 就算后续通过firstArray访问更大的数组范围,这种行为本质是依赖未定义的指针操作,绝非安全的写法。

2. 当firstArray与secondArray指向同一地址时,若释放其中一个数组,另一个是否也会被释放?

是的,两个指针现在指向同一块内存区域。释放其中任意一个,这块内存就会被操作系统回收。此时另一个指针就变成了野指针——它的地址值没变,但指向的内存已经无效了。

3. 为何释放第二个数组时应用程序会崩溃?

核心原因是重复释放同一块内存:

  • 如果你先释放了firstArray,那secondArray指向的内存已经被回收。这时候再释放secondArray,就是对已经归还给系统的内存执行二次释放,属于C++中的未定义行为,操作系统会直接终止程序,导致崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:36:22