删除指向节点的指针数组时,单链表中的节点会被同步删除吗?
指针数组删除后,链表节点会被删除吗?
答案很明确:不会,完全不会。
咱们掰扯清楚这里的逻辑:
- 你创建的指针数组,里面的每一项都只是个「地址标签」——它们存的是链表节点在内存里的位置,和节点本身是完全分开的两个东西。打个比方,数组就像一本小本子,上面写着每个快递(节点)的收货地址,你把本子扔了(删除数组),快递本身还在仓库里好好待着,根本没被处理。
- 你对数组做排序操作,也只是把本子上的地址顺序重新排了一遍,链表节点的实际位置、结构都没动过,更别说被删除了。
举个具体的代码场景:假设你用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
相关产品推荐
相关产品推荐

