问题标签 [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 回答
2973 浏览

c++ - 重新分配 boost::shared_array

我有一个 shared_array: boost::shared_array myarr(new char[m_length]);

我想重新分配数组。我想创建一个具有所需大小的新 shared_array 并使用交换提升方法,但这也会复制引用计数。你有别的想法吗?

0 投票
4 回答
2133 浏览

c - 动态多维数组重新分配

我在使用该realloc功能时遇到了一些问题。

我正在使用这个函数分配一个动态二维数组:

使用下一个代码调用它:

这成功地创建了一个二维数组 1* MATRIX_X_SIZE。

然后,我想在矩阵中添加一行或多行,所以我使用realloc以下函数。它应该添加heightIncrement行。问题是有时它会起作用,而有时它会使程序崩溃。

这个函数被调用:

我究竟做错了什么?

释放先前分配的内存块的函数:

提前致谢。

编辑

  1. 傻我。realloc正如 Karl Knechtel 所指出的,我没有对返回值做任何事情。但是现在,每当我运行它时,程序就会崩溃。
  2. 通过 Bart van Ingen Schenau 的回答,我证实了我所担心的:我忽略了之前分配的几个独立内存块。我什至最终得到了与 Bart 编写的代码相似的代码,但它继续使程序崩溃。
  3. 我添加了assert's 来检查malloc/realloc调用的结果,但我没有任何运气。我在 Win98 中使用 djgpp,发生的事情真的很奇怪:
    • Windows:有时,它永远不会崩溃;其他的,它在添加 2 行后崩溃。
    • MS-DOS:添加 2 行后崩溃。我将尝试将 -O3 与 gcc 一起使用以获取更多线索。什么是适用于 Windows 的有用(且快速学习/使用)的内存损坏/泄漏检测工具?净化是最好的解决方案吗?
  4. 甚至我释放数组的函数也在返回页面错误。
0 投票
7 回答
1613 浏览

c - realloc() 没有赋值问题

我的一个同学给我发了一个代码,问它有什么问题。是这样的:

它应该从用户那里获取数字并保留主要的数字并最终打印出来。我电脑上的输出是这样的:

代码中还有其他内容,但最大的问题显然是没有分配 realloc() 的返回值。但奇怪的是,这是我的问题,为什么这段代码显示第一个质数错误而其他正确?动态数组的地址可能会改变,但为什么第二个和其余的都是正确的而不是第一个呢?

编辑:好的,我问这个的原因是试图理解 realloc() 在这段代码中的行为,如果你有好的资源请分享。重新分配内存时(释放旧内存时), realloc() 是否会更改旧内存位置的内容?

0 投票
1 回答
810 浏览

c - C 数组问题 - realloc'd 内存的奇怪内存问题

我不知道如何解释这个问题。这是非常随机的。

我在这里发布了一些代码:http: //pastebin.com/d2vzas5S

问题出在第 54 行。从技术上讲,不应该根据 main() 中的测试代码输入 if 语句。因为测试代码是在数组中添加指向新槽的指针,重新分配,然后再做一次。

奇怪的是,if 语句在 main 中对数组 (array2) 的第二次测试评估为 true,而这显然不应该。

我一定遗漏了一些完全明显的东西——或者堆/堆栈中发生了一些我不知道的奇怪事情。

有任何想法吗?

0 投票
1 回答
2418 浏览

c++ - Realloc返回null?

我用 malloc 分配了一些内存——大约 128 字节。

稍后,我用大约 200 个字节调用 realloc,但它返回 null!

如果我做free,它会返回一个有效的指针,然后是另一个malloc,但是我想使用realloc。

什么可以解释这种行为(我显然没有用完内存)?这是有效的行为吗?

代码位:

}

编辑:固定。我为我的班级重载了 << 运算符,并让它返回 *this 而不是 void。不知何故,这把一切都搞砸了!如果有人能解释为什么会发生这种情况,那就太好了!

0 投票
3 回答
421 浏览

c - C99 中的灵活数组

注意:我已经重新编写了原始问题以使其更加清晰。

我有一个名为

vcf 是我将读取的打开文件,而 cardp 是指向卡片数组开头的指针。一个文件将包含多张卡片。

readVCard 每次读取文件一行,并调用函数 parseVcProp 来识别该行中的关键字,并将它们分配到结构中的适当位置。

这里是结构

所以一个文件包含多个卡片,一个卡片包含多个属性,等等。

问题是,一张卡片可以有任意数量的属性。在你读完之前不知道有多少。

这是我不明白的。

我必须如何分配内存才能正确使用 parseVcProp?

每次我调用 parseVcProp 时,我显然希望它将数据存储在一个新的结构中,那么我如何事先分配这个内存呢?我只是 malloc(sizeof(VcProp)*1) 吗?

0 投票
2 回答
865 浏览

c - C将字符串保存到二维数组

这个想法是从标准输入读取字符串,直到达到 EOF(以这种格式"string - string")。然后,将字符串分成两个字符串并将它们保存到二维数组中。该数组是动态分配的,最初有 2 行和 20 列,但我想每次添加下一个字符串时添加 2 行(函数expandmat())。这是我的代码:

另外,如果这段代码中有一些没有任何意义的东西,你能告诉我如何解决它吗?

我知道这似乎是一项微不足道的任务,但它一直让我发疯。

谢谢你的帮助。

0 投票
5 回答
6573 浏览

c - realloc 失败的可能性有多大?

当它用完类似的可用内存malloc或可能有其他原因时它会失败吗?

0 投票
4 回答
4714 浏览

c - 具有不同大小结构的结构数组的 malloc()

如果每个结构包含大小不同的字符串数组,如何正确分配结构数组?

所以每个结构可能有不同的大小,并且不可能

realloc(numberOfStructs * sizeof(structName))

malloc(initialSize * sizeof(structName)

如何为此分配内存并跟踪正在发生的事情?

0 投票
7 回答
18038 浏览

c - 对齐内存管理?

我有一些关于管理对齐内存块的相关问题。跨平台的答案将是理想的。但是,由于我很确定不存在跨平台解决方案,因此我主要对 Windows 和 Linux 感兴趣,在较小程度上对 Mac OS 和 FreeBSD 感兴趣。

  1. 让一块内存在 16 字节边界上对齐的最佳方法是什么?(我知道使用的简单方法malloc(),分配一点额外空间,然后将指针提升到正确对齐的值。不过,我希望能少一些杂乱无章的东西。另外,请参见下文以获取更多信息问题。)

  2. 如果我使用普通 old malloc(),分配额外空间,然后将指针向上移动到正确对齐的位置,是否有必要将指针保持在块的开头以进行释放?(在 Windows 上调用free()块中间的指针似乎在实践中有效,但我想知道标准是怎么说的,即使标准说你不能,它是否在所有主要操作系统上都有效。我不要关心晦涩难懂的DS9K类操作系统。)

  3. 这是困难/有趣的部分。在保持对齐的同时重新分配内存块的最佳方法是什么?理想情况下,这将比调用malloc()、复制然后调用free()旧块更智能。我想尽可能地做到这一点。