问题标签 [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.
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!”
有谁知道发生了什么?
c++ - 替换 realloc (C --> C++)
在较早的问题中,我询问了类型转换指针,但被引导到使用 C++ 分配系统而不是 mallocs 的更好解决方案。(我正在将一些 C 代码转换为 C++)
但是,我仍然有类似功能的问题:
我变了:
和
但是,我如何在以下函数中使用 realloc:
我收到以下错误:
编辑2:
好的,我得到的共识是我应该放弃我目前的解决方案(我愿意这样做)。
只是为了确保我理解正确,你们的意思是,我应该只拥有一个包含对象本身的向量,而不是指向对象的指针数组?
c - 一个大的 malloc 与多个较小的 realloc
抱歉,如果之前有人问过这个问题,我无法找到我正在寻找的东西。
我正在从列表中读取字段并将它们写入内存块。我可以
- 遍历整个列表,找到所需的总大小,做一个
malloc
然后再次遍历列表并复制每个字段; - 在我写值时遍历整个列表和
realloc
内存块;
现在,第一个对我来说似乎是最有效的(最少的调用次数)。两种方法的优缺点是什么?
感谢您的时间。
c - 如何为我的 C 结构数组分配更多空间?
我正在尝试向我的结构添加 10 个以上的元素,这些元素已经是 malloc,固定大小为 20。这就是我定义结构的方式:
所以我想到的是重新分配为(但是,不知道如何):
然后添加额外的 10 个元素,
我怎么能做到这一点?任何帮助表示赞赏!
c - 在 C 中使用 realloc 函数的内存分配问题
我有这个功能的问题。此函数在需要时重新分配数组“音乐”的大小。但是当我尝试在循环中多次调用此函数时发生执行错误。它可能是内存分配问题,但我无法弄清楚。
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-vector
a 一起使用,则 结果不太乐观,在增长期间分配 8-10 次。vector
realloc-vector
最后,如果与以相同速率增长的realloc-vector
a 一起使用,则分配 17-18 次。几乎没有比标准向量行为节省一个分配。vector
realloc-vector
我不怀疑黑客可以通过游戏分配大小来节省成本,但我同意史蒂夫的观点,即编写和维护这样一个分配器的巨大努力并没有带来收益。
c - 动态内存:malloc 和 realloc
我是 C 的新手,我在使用动态内存时遇到了麻烦。我 malloc 用于结构图,然后根据需要重新分配。当我试图调试我的代码时,我注意到在 ddd 的帮助下我覆盖了前一个数字(在我提供的第二块代码中 - 变量的名称是 figureHere)。如果有人能看到我愚蠢错误的原因,请告诉我。
第一个代码块在第二个块中调用了一个 void。
c - 检测到 glibc,realloc():无效指针
我为冗长的代码道歉。我有一个简单的问题,但我认为我包含了我的代码,以便清楚我来自哪里。我得到一个 realloc 腐败。我认为腐败是因为我没有正确释放。实际上,我不确定 glibc 甚至说什么或意味着什么。任何人都可以向我简要解释一下吗?再次为冗长的代码感到抱歉。
c - realloc 中的 realloc
在 C 中,你可以在 realloc 中拥有 realloc 吗?例如,当您需要同时 malloc 和重新分配它们时,结构内的结构。如果是,有人可以提供一个简单的例子吗?先感谢您。
c - 为什么 realloc 会消耗大量内存?
由于源代码,这个问题有点长,我试图尽可能地简化它。请耐心等待,感谢您的阅读。
我有一个带有可能运行数百万次的循环的应用程序。我想先做一个,然后再做几千到几百万个调用,而不是在那个循环中进行数千到数百万个malloc
/调用。free
malloc
realloc
但是我遇到了一个问题,当我使用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
导致这种情况?对不起,如果这是一个愚蠢的问题,并提前感谢您的建议。