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

删除指向节点的指针数组时,单链表中的节点会被同步删除吗?

指针数组删除后,链表节点会被删除吗?

答案很明确:不会,完全不会。

咱们掰扯清楚这里的逻辑:

  • 你创建的指针数组,里面的每一项都只是个「地址标签」——它们存的是链表节点在内存里的位置,和节点本身是完全分开的两个东西。打个比方,数组就像一本小本子,上面写着每个快递(节点)的收货地址,你把本子扔了(删除数组),快递本身还在仓库里好好待着,根本没被处理。
  • 你对数组做排序操作,也只是把本子上的地址顺序重新排了一遍,链表节点的实际位置、结构都没动过,更别说被删除了。

举个具体的代码场景:假设你用Node** ptrArray = new Node*[capacity];创建了这个指针数组,之后用delete[] ptrArray;删除它——这行代码只会释放数组本身占用的内存,那些存在数组里的Node*指向的节点,以及节点里的car对象,依然占着内存没被释放。

如果想要彻底清理节点内存,你得先遍历指针数组(或者原链表),逐个对每个节点指针调用delete:

// 先删除每个节点本身
for (int i = 0; i < capacity; i++) {
    delete ptrArray[i];
}
// 再删除指针数组
delete[] ptrArray;

不然的话,这些节点会变成「内存泄漏」——没人再能找到它们的地址,但它们还占着内存空间,直到程序结束才会被系统回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:13:18