当前位置:  开发笔记 > 编程语言 > 正文

将物品推入STL容器后的段故障

如何解决《将物品推入STL容器后的段故障》经验,为你挑选了2个好方法。

您没有复制构造函数.

当您将'a'推入列表时,它会被复制.因为您没有复制构造函数(为c分配内存并从旧c复制到新c)c是a中的相同指针和列表中a的副本.

两个的析构函数都被调用,第一个将成功,第二个将失败,因为内存c指向已经被释放.

你需要一个复制构造函数.

要查看发生了什么,请在构造函数和析构函数中添加一些couts并逐步执行代码.



1> Binary Worri..:

您没有复制构造函数.

当您将'a'推入列表时,它会被复制.因为您没有复制构造函数(为c分配内存并从旧c复制到新c)c是a中的相同指针和列表中a的副本.

两个的析构函数都被调用,第一个将成功,第二个将失败,因为内存c指向已经被释放.

你需要一个复制构造函数.

要查看发生了什么,请在构造函数和析构函数中添加一些couts并逐步执行代码.



2> sharptooth..:

你需要一个深拷贝构造函数来避免double free().你有一个temp类的变量(a),然后你将它添加到列表中.变量被复制.然后清除列表,内部元素被销毁并调用free().然后,一个变量被销毁和free()再次呼吁,这导致分段错误相同的地址.

您需要一个复制构造函数来深度复制类临时变量,这将使malloc()另一个缓冲区和复制数据.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有