问题标签 [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.

0 投票
6 回答
885 浏览

c - C内存分配问题

所以我有几个函数可以与string我创建的类型一起使用。其中之一创建了一个动态分配的字符串。另一个接受所述字符串,并扩展它。最后一个释放字符串。注意:函数名称已更改,但都是我自定义的。

上面的代码有效 - 它编译并运行良好。下面的代码不起作用 - 它编译、运行,然后

代码之间的区别在于该adds()函数增加了 1 个字符 (a !)。它添加的字符没有区别 - 只是长度。为了完整起见,以下代码不起作用:

奇怪的是,以下代码使用不同的函数addc()(添加 1 个字符而不是字符串)可以工作:

以下,也做同样的事情,工作:

所有不起作用的错误都是这样的:

test是我在其中的程序的极具描述性的名称。)

就函数内部而言,mymake()是一个调用strlen()和两个调用malloc()和一个调用memcpy(),myadds()是一个调用strlen()、一个调用realloc()和一个调用memcpy(),而 myfree()是对标准库的两个调用free()

那么有什么想法为什么我会得到这个,还是我需要分解并使用调试器?我只能用adds()超过一定长度的 es 来获得它,而不是addc()s。

分解和发布功能的代码:

0 投票
2 回答
1986 浏览

c - 指向 mpz_t 数组的指针的双重释放错误

我目前正在学习 libgmp,为此我正在编写一个找到主要因素的小程序。我的程序调用了一个函数,它用不同数量的 mpz_t 整数填充数组,给定数字的素数,我需要返回。我打算将最后一个元素设置为 NULL,所以我知道该函数找到了多少个 mpz_t 整数。

我的问题是我的指向 mpz_t 整数的指针数组出现双重免费错误。我写了一些示例代码来说明我的问题:

2 和 5 打印到标准输出,所以分配似乎没问题。但是我在下面得到了双重免费错误:

我仍然完全习惯了指针,并且 gcc 没有给出任何错误,但是我很确定这是错误的,我应该做类似的事情

代替:

但这给了我一个编译器错误

无论如何,我的问题是:

  1. 我确定我应该取消引用 mpz_init_set_ui() 调用中的指针,为什么这是错误的?
  2. 有没有更好的方法来做到这一点?我应该使用链表吗?(我还没有学过链表,我认为数组最适合这个,但如果我真的让事情变得更加困难,请告诉我)3.创建一个结构会更好用一个指向我的数组的指针和另一个带有我数组中元素数量的变量,然后返回一个指向它的指针?

该平台是 linux 32 位,以防万一。

这是我刚才的代码,我要修改,我在堆栈上声明了mpz_t的数组。但我想让 main() 成为一个函数:

在此先感谢人们,

0 投票
5 回答
2104 浏览

c - 悬空指针和双重释放

经过一些痛苦的经历,我明白了悬空指针和双重释放的问题。我正在寻求适当的解决方案。

aStruct有许多字段,包括其他数组。

有没有什么办法可以优雅free_aStruct(X)free_aStruct(B)退出?

执行上述操作仅设置A = NULL何时free_aStruct(A);调用。B现在悬空。

如何避免/纠正这种情况?引用计数是唯一可行的解​​决方案吗?或者,是否有其他“防御性”方法来释放内存以防止free_aStruct(B);爆炸?

0 投票
5 回答
4125 浏览

c++ - Double Free inside of a destructor upon adding to a vector

Hey, I am working on a drum machine, and am having problems with vectors.

Each Sequence has a list of samples, and the samples are ordered in a vector. However, when a sample is push_back on the vector, the sample's destructor is called, and results in a double free error.

Here is the Sample creation code:

And the 'Dynamo' code that creates each sample in the vector:

Here is main():

And this is what happens when the program is run:

However, when the delete [] is removed from the destructor, the program runs perfectly.

What is causing this? Any help is greatly appreciated.

0 投票
2 回答
1831 浏览

c++ - 是否可以忽略 UnMapViewOFFile() 的错误 487 (ERROR_INVALID_ADDRESS)?

下午好,我们正在尝试构建一个内存映射文件缓存程序原型,供 Windows 和 Linux 32 位应用程序使用。每次运行原型时,当我们尝试调用 UnMapViewOfFile 来取消映射缓存的内存映射文件区域时,都会收到错误 487(错误无效地址)。我们认为这是因为我们尝试取消映射先前未映射的区域。我们想知道是否可以忽略此错误消息。

我们尽最大努力确保每次调用 MapViewOfFile 都通过以下方式匹配 UnMapViewOfFile ,每次调用 MapViewOfFile 时,我们都使用以下代码:

每次我们取消映射内存映射文件区域时,我们都会使用以下摘录:

Range 类如下所示:

感谢您阅读这篇文章。

0 投票
3 回答
1053 浏览

iphone - iPhone应用程序中令人困惑的双重免费错误消息/内存泄漏

编辑 - 添加 .h 文件

我很难找到导致双重免费错误的原因。

解决的步骤

1)使用僵尸工具。僵尸报告tid正在被双重释放

2) 在 malloc_error_break 上设置断点。这将以下代码段识别为错误:

3)我查看了代码以查看[lcs_id release]以前的位置-我什么也没找到。

4)在绝望地尝试解决它时,我注释掉了[lcs_id release]。这停止了 double free​​错误消息,但是当我通过泄漏运行它时,它说这会导致内存泄漏。

我究竟做错了什么?

非常感谢。

以下是代码的完整副本:

0 投票
1 回答
14327 浏览

memory-management - FORTRAN 中的释放和内存分配问题

我的部分 FORTRAN 代码的解除分配和分配方面存在问题。特别是,我认为这个问题与在网上搜索我的错误消息时的内存分配有关。错误消息涉及无效指针,但是,我没有在我的程序中使用任何指针

在完成我的 f 循环的第 2 次迭代后(见下文),程序崩溃了,或者说大部分时间它崩溃了,有时它只是冻结了。我相信这是错误所在。随着程序运行到这一点。

我有未显示的子程序,但由于它们适用于其他模拟组合,我有理由相信它们不是问题。我在程序中的其他地方使用 deallocate 和 allocate (成功),所以我很惊讶它在这里不起作用。

为了便于阅读,我只展示了程序的一部分。特别是,我删除了对我编写的子例程的调用。我希望我已经为你们程序员提供了足够的信息来帮助我找出问题所在。如果不是,请指定您想要的其他信息,我很乐意遵守。我已经使用各种编译器选项编译了该程序,并修复了一些错误并删除了任何警告。然而,此时编译器选项并没有给我更多信息。

编译器选项

输出

错误信息

[为简洁起见,未显示其余错误消息]

0 投票
2 回答
15165 浏览

iphone - double free*** 在 malloc_error_break 中设置断点以在 ARC 中调试

我在我的应用程序中使用 ARC 处理核心数据和线程等,在做了所有努力使核心数据与线程一起工作而没有任何崩溃之后,现在我遇到了一个新的崩溃,原因是 -

我该怎么处理这个?我无法控制对象的保留计数。

0 投票
1 回答
1874 浏览

c - 静态库加载两次

我有共享对象 A.so ,它静态链接到 libssl.a 和另一个共享对象 B.so ,它也静态链接 libssl.a 。

A.so & B.so 在全球范围内具有来自 libssl.a 的符号。我通过 readelf -s A.so 检查了这个

我有一个可执行的 a.out 加载 A.so 和 B.so。当 a.out 终止时,我在 A.so 中的 libssl.a 中的一个符号中出现双重释放错误。

尽管 libssl.a 静态链接到每个共享对象,但由于它们是全局公开的,因此有可能共享相同的符号而不是选择它的本地副本。

这是什么解决方法?如何在这里使符号本地化?

请帮忙

0 投票
3 回答
185 浏览

c++ - 为什么不在我的 C++ 代码中出现双重免费错误?

g++ 版本是g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50)

我的测试代码如下

只要有测试用例一,程序运行没有错误,但如果我添加测试二,这个程序会有双重免费错误。不知道这个错误是怎么发生的?