问题标签 [malloc]

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 投票
1 回答
534 浏览

cocoa - NSTreeController - malloc 双释放错误

我在我的程序中将 NSTreecontroller 与 NSOutlineView 结合使用,并且我的程序不断吐出:malloc: *** error for object 0x1d70d0: double free. 当我删除 IB 中的绑定时,这些消息就会消失。知道为什么会这样吗?

注意:这种行为不会使我的程序崩溃,但我怀疑它可能是崩溃程序的根源。

0 投票
9 回答
3528 浏览

c - 从错误返回后释放内存的最佳方法是什么?

假设我有一个为调用者分配内存的函数:

如果第二个 malloc() 失败,我想听听您对 free() 分配内存的最佳方式的反馈。你可以想象一个更复杂的情况,有更多的错误退出点和更多的分配内存。

0 投票
4 回答
3465 浏览

c - 将 int 成员添加到 C 结构会导致段错误

我还在学习 C,并且已经开始使用它来生成图像。我不知道为什么我的一个程序会出现段错误。这是源代码,减少到 40 行:

它编译并运行良好(在 Ubuntu 上使用 gcc,在带有 Cygwin 的 Vista 上使用),但取消注释处理 img->o 的两行会破坏它。我感觉它与上一个问题有关,但我正在 malloc'ing 所有需要 malloc'ed 的东西(我认为)。任何帮助,将不胜感激。

0 投票
8 回答
3271 浏览

c - C 会自动为我分配内存吗?

我只写了几个星期的 C 语言,并没有花时间为自己担心太多malloc()。不过,最近,我的一个程序返回了一串幸福的面孔,而不是我期望的真/假值。

如果我创建这样的结构:

然后像这样初始化它

我最终会访问存储在某个地方的内存中的快乐面孔,或者可能会覆盖以前存在的单元格,还是什么?我的问题是,当我实际上还没有 malloc() 分配适当的内存量时,C 如何分配内存?默认是什么?

0 投票
29 回答
298503 浏览

c - 我要转换 malloc 的结果吗?

这个问题中,有人在评论中建议我不应该转换结果malloc。即,我应该这样做:

而不是:

为什么会这样?

0 投票
14 回答
39674 浏览

c - malloc() 是否分配连续的内存块?

我有一段由一位非常老派的程序员编写的代码:-)。它是这样的

程序员基本上正在研究缓冲区溢出概念。我知道代码看起来很狡猾。所以我的问题是:

  1. malloc 是否总是分配连续的内存块?因为在这段代码中,如果块不连续,代码将大量失败

  2. 这样做free(request_buffer),它会释放 malloc ie 分配的所有字节sizeof(ts_request_def) + (2 * 1024 * 1024),还是只释放结构大小的字节sizeof(ts_request_def)

  3. 您是否看到这种方法有任何明显的问题,我需要与我的老板讨论这个问题,并希望指出这种方法的任何漏洞

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 投票
18 回答
145172 浏览

c - 当您在程序终止之前在 malloc 之后不释放时,真正会发生什么?

我们都被教导必须释放每个分配的指针。不过,我有点好奇不释放内存的实际成本。在某些明显的情况下,例如在malloc()循环或线程执行的一部分中调用时,释放非常重要,因此不会出现内存泄漏。但请考虑以下两个示例:

首先,如果我有这样的代码:

这里的真正结果是什么?我的想法是进程死了,然后堆空间无论如何都消失了,所以错过调用并没有什么坏处free(但是,我确实认识到无论如何都有它对于关闭、可维护性和良好实践的重要性)。我的这个想法是对的吗?

其次,假设我有一个有点像 shell 的程序。用户可以声明变量aaa = 123,这些变量存储在一些动态数据结构中供以后使用。显然,很明显您会使用一些会调用某些 *alloc 函数(散列图、链表等)的解决方案。对于这种程序,调用后释放是没有意义的,malloc因为这些变量必须在程序执行期间始终存在,并且没有好的方法(我可以看到)用静态分配的空间来实现它。分配一堆内存但仅作为进程结束的一部分释放是不是糟糕的设计?如果是这样,有什么替代方案?

0 投票
9 回答
3756 浏览

c++ - 如何在c ++中将内存块读取为char

您好,我有一块内存(使用 malloc() 分配),其中包含位(位字面量),我想将其读取为 char 数组,或者,更好的是,我想打印出 8 的 ASCII 值连续位的内存。

我已将他的内存分配为 char *,但我无法以比评估每个位更好的方式取出字符,将值添加到 char 并在循环中向左移动 char 的值,但我正在寻找更快的解决方案。谢谢

我现在写的是这样的:

分配:

写给内存:

直到现在我还无法恢复角色,我只能使用以下方法打印出位:

我正在尝试做的一个例子是:

input.txt 包含字符串“AAAB”

我的程序必须将“AAAB”作为“01000001010000010100000101000010”写入内存(AAAB 的 ASCII 值是 65656566 位)

然后我希望它具有将内存内容重写为文件的功能。

因此,如果内存再次包含“01000001010000010100000101000010”,它将写入输出文件“AAAB”。

0 投票
2 回答
21029 浏览

c++ - 英特尔 TBB 的可扩展分配器如何工作?

tbb::scalable_allocatorIntel Threading Building Blocks 中的实际作用是什么?

它当然可以有效。我刚刚用它来减少 25% 的应用程序执行时间(并看到 CPU 利用率在 4 核系统上从 ~200% 增加到 350% std::vector<T>std::vector<T,tbb::scalable_allocator<T> >。另一方面,在另一个应用程序中,我看到它使已经很大的内存消耗翻了一番,并将东西发送到交换城市。

英特尔自己的文档并没有提供太多内容(例如,本常见问题解答末尾的一小部分 )。在我自己深入研究它的代码之前,谁能告诉我它使用了什么技巧?

更新:第一次使用 TBB 3.0,并从可扩展分配器中看到了我最好的加速。将单个更改vector<int>vector<int,scalable_allocator<int> >减少某些东西的运行时间从 85 秒到 35 秒(Debian Lenny,Core2,TBB 3.0 来自测试)。