问题标签 [memory-reallocation]

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 投票
0 回答
64 浏览

c - 关于在实践中正确使用 realloc 的新手问题

我试图从实际的角度了解如何考虑内存分配。我想我理解如何实现malloc,并且realloc在基本意义上,但我不明白如何有效地做到这一点。

我的书籍和在线参考资料中的示例都显示realloc在循环中使用,例如增加数组的长度。我不太清楚,但似乎这种方法可能不是很有效。

例如,在下面的测试代码中,正在构建一个 JSON 字符串以将文件名、大小和上次修改日期传递给另一个应用程序。事先不知道目录中有多少文件或数据元素的大小。我意识到这很简单,但是当事先不知道行数及其大小时,我在构建 SQLite 结果行的 JSON 字符串时遇到了类似的问题。这个文件信息代码示例更容易理解,但更重要的任务是 SQLite 数据。

在下面的代码中,将一段 JSON 的开头写入字符数组json,然后在循环中写入每段文件信息,然后while关闭 JSON 字符串。全部使用snprintf.

现在,json任意设置为长度1000;并且代码确实会生成此数据的正确格式的 JSON 字符串,只要它适合。

我的问题是,是否realloc()真的应该在循环的每次迭代中使用while来扩展json一旦知道要写入的下一个数据的大小的大小?或者,realloc()有点工作,最好在开始时分配一个更大的内存块,然后在剩余空间json达到最小值或snprintf返回一个指示写入截断的值时用另一个更大的块扩展它,这样来电少了realloc()

这在“现实生活”中是如何做到的,而不是在书中举例说明?

谢谢你。

0 投票
1 回答
65 浏览

c - realloc() 出了什么问题?

我正在编写一个使用 realloc() 的代码。以下是问题的简化版本。尽管代码看起来很明显,但它似乎不起作用。

该程序运行max_len=8或低但不超过它。为什么会这样?提前致谢。