问题标签 [double-free]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 尝试在 unordered_map 中擦除时双重释放或损坏
我有一个继承自类案例的类 Block :
(两个构造函数都非常基本,我没有在任何地方使用任何新的)
我有一个无序地图的 unordered_map 来存储我的块:
但是当我尝试删除一个时:
我得到那些错误:
我试图打印析构函数,在我得到这个错误之前只调用了 Block 的析构函数。
大约2个小时我正在寻找解决方案,所以我终于在这里问了,谢谢!
ubuntu - 我收到双重免费或损坏错误 Karatsuba Multiplication (base <=10)
如果第一个数字小于第二个数字(上下文暗示不可能(p1-(p0 + p2)))调用schoolSubtraction时,有时会出现双重释放或损坏错误。schoolAddition经过验证并适用于所有测试用例在向量中添加数字。由于调用向量的零处理程序,schoolSubtraction 中两个数字都是等长的假设总是正确的。
我已尝试追踪,但找不到错误发生的位置
input (in form of number 1, number 2, base): 492638023618775948882302343403408655761920113817048519624315622726245389531264254792 124981979384285271237499877628063356640550971704683349 10
输出:615708753118368961771601714838035857544490320978814064854285740472402602319415104089670124660515168802508616757783026507385788266507385888
这是正确的,但输入:73 773 2 * `./a.out' 中的错误:双重释放或损坏(输出):0x00000000007bbe20 *等。
c - 如何在 c 中克服双重释放或损坏(out)Aborted(core dumped)
我正在尝试制作一个 zoom_image 函数,该函数使用离散傅里叶变换缩放灰度图像。如果图像尺寸小于或等于 4 * 4 但如果尺寸增加,我的代码将包含在内。它给出了“双重免费或损坏(出)中止(核心转储)”错误
我已经尝试过我的代码的 fft_d 和 ifft_2d 函数,如果输入大小很小,如果输入大小很大,它就会工作,它会给出上述错误
c - 两次释放 glib 缓冲区是否安全?
释放两次由glib
g_malloc
函数分配的缓冲区是安全的还是禁止的?
c++ - 为什么语言环境对象会释放不是由它创建的构面?
请原谅我,我是一个英语很差的中国人。我希望我正确地表达了这些事情。
我认为没有必要通过检查 C++ 世界中某种类型的引用计数来释放 obj。我相信大多数 c++ 程序员会认为 RAII 是一种更好的方法。那么,为什么std::facet
像这样由 STL 实现呢?出于历史原因(在 C++11 之前)?
众所周知,std::numpunct 的构造函数接收一个参数(size_t ref)来控制自身的销毁。如果 "ref" 为 0,std::numpunct 的这个 obj 将被自动释放。我已经学会了如何使用它正确编码并实现了一个格式化程序,如下所示。
解决方案1更有可能导致内存泄漏或双重释放,而解决方案2更安全,不是吗?
c++ - c ++从2组指针中删除一个指针
我有两组指针,我想从中删除某个指针。但它在删除边缘函数的最后一行给了我一个双重免费错误。
我最初怀疑可能是因为set::erase()
隐式调用delete
,但我阅读了一些文档并发现不会调用析构函数,因为edge_ins
它们edge_outs
都是指向 Edge 的指针集。
现在我不确定是什么导致第二次调用时出现双重免费错误,set::erase()
所以我来这里寻求帮助。
我怀疑这可能是因为指针被视为对象,当我从中删除相同的指针时,root->edge_outs.erase(e)
它已经消失了,所以它由于第二次调用 at 而崩溃root->edge_ins.erase(e)
。但到目前为止,我找不到任何有用的东西。
边缘删除:
可能是相关的,所以我还将添加我如何为 Edge 分配内存。
边缘创建:
更新:我已经更改了代码,这样我就不会取消引用已删除的对象,但它仍然会给出双重释放错误。
新代码:
c - 如何在我的磁盘调度模拟 C 程序中修复这个双重释放或损坏 (fasttop) 错误?
上下文:我目前正在从事一项任务,我要为具有 800 个磁道和每个文件请求 1-5 个磁道请求的磁盘模拟最短寻道时间优先磁盘调度算法(我应该输入 1000 个文件请求)。我正在使用双向链表将它们存储在队列中,然后当我需要处理(删除)另一个请求时,我正在搜索具有最短查找时间的下一个请求,然后将其移动到队列的前面并删除它。我已经包含了整个程序的上下文。
无论如何,我在尝试运行程序时收到错误“双重释放或损坏(fasttop)”错误,我只是无法弄清楚导致错误的原因以及如何修复它。我尝试了一个调试器,它声称错误发生在第 56 行(我根本不相信)。我试过删除我的 free()s,但是我得到一个分段错误(或者我可能会得到两个)。如果有帮助的话,free() 就在我的 RemoveFromList() 函数的末尾附近。任何帮助将不胜感激。谢谢!
c++ - GMock SetArrayArgument 双重释放或损坏
编辑:我自己解决了双重免费错误,但是问题(问题 1)为什么它的行为与命令行和 CLion 内部的行为不同仍然存在......
我正在尝试使用 gmock 和 gtest。我想模拟一个将指针作为参数并用内容填充它的函数。我的模拟类具有以下功能:
我的测试代码如下所示:
现在,在调用之后,receive_msg
我希望数组a
的内容为test
. 当我在 CLion 中执行此操作时,a
只有随机内容。当我使用 cmake 单独构建并运行它时,我收到错误消息
有两件事让我感到困惑:
- 为什么在 CLion 内部运行和从命令行运行有区别?我想这可能是一些编译器标志?
- (这个设置在不同的情况下工作,例如我有另一个对象,它接受
MockUdpServer
和内部调用receive_msg
。这个调用是成功的。为什么它不能直接在测试本身工作?回答:在其他测试用例中我使用了 DoAll并指定了返回值和数组内容。)
编辑:显然测试代码必须指定返回值,即使它没有被使用。以下代码不会产生任何错误:
c++ - C++ 删除/(递归)对象破坏问题
我无法理解为什么以下代码总是抛出此异常:
AddressSanitizer:尝试双重释放
我想我没有得到新/删除过程的某些部分,但就是想不通。
感谢您提前提供任何帮助......或者女孩;P
dictionary - 字典ChangeNotification:有没有办法检测双释放错误?
我怀疑双重释放错误会导致访问冲突(稍后在同一程序中)。
给定的类包含一个通用 TDictionary 并在使用 FMyDict.OnValueNotify 创建它后分配一个 ChangeNotification 处理程序:= ChangeNotification;
如果我取消注释 Item.Free,则 AV 不再出现。
但是因为 AV 是零星出现的(在程序的数百次循环迭代中出现一次),我不能完全证明存在双重释放情况。
我的第一个想法是在释放对象之前在对象中设置一些“标记”。在第二次免费时,我可以看到该标记已设置。
或者是否有不同的“最佳实践”来检测双重自由?