终于发现为什么链表需要用new来创建对象

一步步调试,终于发现了创建对象的坑。

new对象相当于全局吧,总之new出来的对象不手动去释放,内存是一直占在那的。我做个链表,想的不用new,不用自己去手动释放内存方便点,结果就进了大坑!

while (ptemp != NULL)
{
    if (ptemp->Key == oldV)
    {
        ListNode newTemp(newV);
        cout << &newTemp << endl;
        newTemp.pNext = ptemp->pNext;
        ptemp->pNext = &newTemp;
        break;
    }
    else
        ptemp = ptemp->pNext;
}

就是这段代码,我想的newTemp是自己创的局部变量,这个对象每次都是新的,结果在VS2019上调试,一步步发现,原来每次新建的newTemp居然是一个地址!!因为链表里已经加入了之前的newTemp的这个地址,这直接导致链表发生错误,就一个地址,然后指向自己去了……死循环!

所以意识到,链表这种东西真不能交给系统去分配,特别是你要加入链表去的对象的申请,申请出来就是个内存,交给系统的话,很可能就被回收了你还不知道,并且新建的可能就跟以前的地址重复了。

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值