永发信息网

VC++中调用析构函数发生错误

答案:2  悬赏:50  手机版
解决时间 2021-02-06 05:44
  • 提问者网友:练爱
  • 2021-02-05 14:01
VC++中调用析构函数发生错误
最佳答案
  • 五星知识达人网友:迷人又混蛋
  • 2021-02-05 15:13
在构造函数中动态创建了内存,这块内存是在堆上创建的,与程序的生命周期一样。
heaparr=new type [heapmaxsize];
用heaparr保存了这块内存的地址。
而你又执行了heaparr=a;
也就是heaparr指向了数据组a的地址(你动态分配的内存地址已经没有了,但这块内存还存在,此时已经出现了内存泄露).
heaparr保存数组a的地址,但是你并不能保证数组a的生命周期与你写的这个类是一致的,当类析构的时候要执行delete []heaparr,此时呢heaparr可能已经是空了,它指向的地址不存在,所以会崩溃。
全部回答
  • 1楼网友:低血压的长颈鹿
  • 2021-02-05 15:38
你的构造函数有问题,而且造成了内存泄漏。
heaparr=new type [heapmaxsize]; //heaparr指向一块新申请的堆内存
heaparr=a; //heaparr指向a,上次新申请的堆内存丢失,并且未被回收。
因为heaparr指向a,而a并不一定是在堆上动态申请的内存,所以未必能delete,即使能,那么在另外的函数中再delete则仍然报错。看你出错的原因,应该是a不是动态申请的内存所导致。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯