问题标签 [realloc]

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 投票
2 回答
2122 浏览

c - C Realloc 错误 - “断言 `ptr == alloc_last_block' 失败!”

我正在用 C 语言编写一个函数,该函数接受一个链表和一个谓词,并返回一个数组,其中包含满足此条件的链表的所有值。这是功能:

我传入了一个始终返回 1 的谓词(即 get_all_that 基本上是 to_array),并且在 i=4 的迭代中的星号行出现错误。回溯上的错误(从 SIGABRT 自动打印)是“*** glibc detected *** ~/list/test: realloc(): invalid next size: 0x0804c0e8 ***”

我打开 GDB 告诉它在 i=4 时调用 realloc 之前立即中断。然后我尝试从 GDB 手动调用 realloc(vals, i*vps) 并收到错误消息:“ld.so 检测到不一致:dl-minimal.c: 138: realloc: Assertion `ptr == alloc_last_block' failed!”

有谁知道发生了什么?

0 投票
8 回答
10662 浏览

c++ - 替换 realloc (C --> C++)

在较早的问题中,我询问了类型转换指针,但被引导到使用 C++ 分配系统而不是 mallocs 的更好解决方案。(我正在将一些 C 代码转换为 C++)

但是,我仍然有类似功能的问题:

我变了:

但是,我如何在以下函数中使用 realloc:

我收到以下错误:

编辑2:

好的,我得到的共识是我应该放弃我目前的解决方案(我愿意这样做)。

只是为了确保我理解正确,你们的意思是,我应该只拥有一个包含对象本身的向量,而不是指向对象的指针数组?

0 投票
3 回答
1137 浏览

c - 一个大的 malloc 与多个较小的 realloc

抱歉,如果之前有人问过这个问题,我无法找到我正在寻找的东西。

我正在从列表中读取字段并将它们写入内存块。我可以

  • 遍历整个列表,找到所需的总大小,做一个malloc然后再次遍历列表并复制每个字段;
  • 在我写值时遍历整个列表和realloc内存块;

现在,第一个对我来说似乎是最有效的(最少的调用次数)。两种方法的优缺点是什么?

感谢您的时间。

0 投票
2 回答
12279 浏览

c - 如何为我的 C 结构数组分配更多空间?

我正在尝试向我的结构添加 10 个以上的元素,这些元素已经是 malloc,固定大小为 20。这就是我定义结构的方式:

所以我想到的是重新分配为(但是,不知道如何):

然后添加额外的 10 个元素,

我怎么能做到这一点?任何帮助表示赞赏!

0 投票
3 回答
406 浏览

c - 在 C 中使用 realloc 函数的内存分配问题

我有这个功能的问题。此函数在需要时重新分配数组“音乐”的大小。但是当我尝试在循环中多次调用此函数时发生执行错误。它可能是内存分配问题,但我无法弄清楚。

0 投票
3 回答
2532 浏览

c++ - 在 C++ 中使用 realloc

std::realloc如果 malloc 的内存包含非 pod 类型,则在 c++ 中是危险的。似乎唯一的问题是,std::realloc如果它不能原地增加内存,就不会调用类型析构函数。

一个微不足道的工作将是一个try_realloc函数。如果它不能就地增长,它不会分配新内存,而是简单地返回 false。在这种情况下,可以分配新内存,将对象复制(或移动)到新内存,最后释放旧内存。

这似乎非常有用。 std::vector可以充分利用这一点,可能避免所有副本/重新分配。
抢先式阻燃剂:从技术上讲,这与 Big-O 性能相同,但如果向量增长是您应用程序中的瓶颈,那么即使 Big-O 保持不变,x2 的加速也是不错的。

但是,我找不到任何像try_realloc.

我错过了什么吗?是try_realloc不是没有我想象的那么好用?是否有一些隐藏的错误导致try_realloc无法使用?

更好的是,是否有一些记录较少的 API 可以执行try_realloc

注意:我显然在这里使用库/平台特定代码。我并不担心,因为try_realloc它本质上是一种优化。


更新: 根据 Steve Jessops 关于vector使用 realloc 是否更有效的评论,我写了一个概念证明来测试。模拟realloc-vector向量的增长模式,但可以选择重新分配。我在向量中运行了多达一百万个元素的程序。

作为比较vector,在增长到一百万个元素时必须分配 19 次。

结果,如果realloc-vector是唯一使用堆的东西,结果非常棒,3-4 分配,同时增长到百万字节的大小。

如果与以 66% 的速度增长的realloc-vectora 一起使用,则 结果不太乐观,在增长期间分配 8-10 次。vectorrealloc-vector

最后,如果与以相同速率增长的realloc-vectora 一起使用,则分配 17-18 次。几乎没有比标准向量行为节省一个分配。vectorrealloc-vector

我不怀疑黑客可以通过游戏分配大小来节省成本,但我同意史蒂夫的观点,即编写和维护这样一个分配器的巨大努力并没有带来收益。

0 投票
2 回答
776 浏览

c - 动态内存:malloc 和 realloc

我是 C 的新手,我在使用动态内存时遇到了麻烦。我 malloc 用于结构图,然后根据需要重新分配。当我试图调试我的代码时,我注意到在 ddd 的帮助下我覆盖了前一个数字(在我提供的第二块代码中 - 变量的名称是 figureHere)。如果有人能看到我愚蠢错误的原因,请告诉我。

第一个代码块在第二个块中调用了一个 void。



0 投票
1 回答
14484 浏览

c - 检测到 glibc,realloc():无效指针

我为冗长的代码道歉。我有一个简单的问题,但我认为我包含了我的代码,以便清楚我来自哪里。我得到一个 realloc 腐败。我认为腐败是因为我没有正确释放。实际上,我不确定 glibc 甚至说什么或意味着什么。任何人都可以向我简要解释一下吗?再次为冗长的代码感到抱歉。





0 投票
1 回答
795 浏览

c - realloc 中的 realloc

在 C 中,你可以在 realloc 中拥有 realloc 吗?例如,当您需要同时 malloc 和重新分配它们时,结构内的结构。如果是,有人可以提供一个简单的例子吗?先感谢您。

0 投票
3 回答
3408 浏览

c - 为什么 realloc 会消耗大量内存?

由于源代码,这个问题有点长,我试图尽可能地简化它。请耐心等待,感谢您的阅读。

我有一个带有可能运行数百万次的循环的应用程序。我想先做一个,然后再做几千到几百万个调用,而不是在那个循环中进行数千到数百万个malloc/调用。freemallocrealloc

但是我遇到了一个问题,当我使用realloc. 如果我使用malloc,我的内存使用情况很好。

valgrind如果我使用's memtest在较小的测试数据集上运行,它会使用malloc或报告没有内存泄漏realloc

我已经验证我将每个malloc-ed(然后是realloc-ed)对象与相应的free.

所以,理论上,我没有泄漏内存,只是使用realloc似乎消耗了我所有可用的 RAM,我想知道为什么以及我能做些什么来解决这个问题。

我最初拥有的是这样的东西,它malloc可以正常使用和工作:

Malloc代码

这工作正常。但我想要更快的东西。

现在我测试一个realloc安排,malloc它只 -s 一次:

重新定位代码

如果我在使用导致百万循环条件的大型数据集free -m运行基于此的测试时在命令行上查看输出realloc,我的内存从 4 GB 下降到 0 并且应用程序崩溃。

我错过了什么realloc导致这种情况?对不起,如果这是一个愚蠢的问题,并提前感谢您的建议。