问题标签 [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 投票
6 回答
17676 浏览

java - 如何在不使用预制类的情况下在 Java 中创建可扩展的动态数组?

是的,这是一个家庭作业问题,所以给metehkodezplsthx!:)

无论如何,这就是我需要做的:
我需要有一个类,它的属性数组中包含另一个类的对象。在我看来,正确的方法是使用 LinkedList、Vector 或类似的东西。不幸的是,上次我这样做时,我从教授那里得到了火和硫磺,因为根据他的信念,我使用的是高级的东西,而没有了解基础知识。

现在下一个明显的解决方案是创建具有固定数量元素的数组并添加检查以查看数组是否已满。如果它已满,他们将创建新的更大的数组,将旧数组的数据复制到新数组并将新数组返回给调用者。如果它大部分是空的,他们会创建新的更小的数组并将数据从旧数组移动到新数组。对我来说,这看起来有点愚蠢。对于我的家庭作业,数组中的元素可能不会超过 3 个,但我想制作一个可扩展的解决方案,而无需手动计算有关数组填充频率的统计信息,添加的新元素的平均数量是多少,然后使用计算结果来计算新数组中的元素数等。

顺便说一句,不需要从数组中间删除元素。

有小费吗?

0 投票
1 回答
384 浏览

c - realloc - 将 int 转换为 char

我通过遍历整个数组将整数数组转换为 char,然后将生成的字符串添加到 ncurses 的方法new_item中。出于某种原因,我在记忆中做错了什么reallocate,因此我得到第一列:

-

**更新:这已得到修复。见上面的代码!

0 投票
1 回答
21213 浏览

c - realloc():下一个大小无效

我遇到了 realloc 函数的问题。我只使用 C(所以没有向量)和 LibCurl。我遇到的问题是我在 write_data 函数的第 12 次迭代中收到以下错误(realloc(): invalid next size)(我作为回调传递给 Curl 的函数,每次 libcurl 都有一些要传回的数据(数据以块的形式传递))。

痕迹:

-删除-

来源:

提前致谢,

0 投票
3 回答
4510 浏览

c++ - 多次调用 realloc() 似乎会导致堆损坏

这段代码有什么问题?每次都会崩溃。

有时它是一个失败的断言“_ASSERTE(_CrtIsValidHeapPointer(pUserData));”,有时它只是一个“堆损坏”错误。

更改缓冲区大小会以一些奇怪的方式影响这个问题 - 有时它会在“realloc”上崩溃,而其他时候会在“free”上崩溃。

这段代码我调试过很多次,指针没有任何异常。

谢谢!

0 投票
5 回答
4714 浏览

c++ - 为什么 C++ 分配器中没有重新分配功能?

在 C 中,标准的内存处理函数malloc()realloc()free()。但是,C++ stdlib 分配器只并行其中两个:没有重新分配功能。当然,不可能做到与 完全相同realloc(),因为简单地复制内存不适用于非聚合类型。但是,比如说,这个函数会不会有问题:

在哪里

  • ptr先前使用相同的对象分配器分配num_now
  • num_requested>= num_now;

和语义如下:

  • 如果分配器可以将给定的内存块ptr从对象的大小扩展num_nownum_requested对象,它会这样做(使额外的内存未初始化)并返回true
  • 否则它什么也不做并返回false

当然,这不是很简单,但据我所知,分配器主要用于容器,而容器的代码通常已经很复杂。

给定这样一个函数,std::vector比如说,可以增长如下(伪代码):

无法完全改变内存大小的分配器可以通过 unconditional 实现这样的功能return false;

是否有这么少的能够重新分配的分配器实现不值得打扰?还是我忽略了一些问题?

0 投票
3 回答
1116 浏览

c - C 中 realloc() 的问题。总是挂起但编译得很好

我在使用旨在作为字符串缓冲区的程序时遇到了一些问题,特别是此函数旨在使用字符串 cstr 重置缓冲区。如果 cstr 为 null,则需要将内容重置为空字符 '\0'。它总是挂在第二组 realloc 上,它正在调整 buf->contents 的大小,我不知道为什么会这样。任何帮助都是极好的。

结构:

它被称为

这是有问题的 strbuf_reset 函数。

我认为建议的更改是……

0 投票
6 回答
1192 浏览

c - 高效内存重新分配问题

假设我有一个程序(例如 C++),它分配多个对象,永远不会大于给定的大小(我们称之为 MAX_OBJECT_SIZE)。

我在堆上也有一个区域(我将其称为“页面”)(分配给例如 malloc(REGION_SIZE),其中 REGION_SIZE >= MAX_OBJECT_SIZE)。
我一直在该页面中保留空间,直到填充的空间等于 PAGE_SIZE(或至少获得 > PAGE_SIZE - MAX_OBJECT_SIZE)。

现在,我想分配更多内存。显然我以前的“页面”还不够。所以我至少有两个选择:

  1. 使用 realloc(page, NEW_SIZE),其中 NEW_SIZE > PAGE_SIZE;
  2. 分配一个新的“页面”(page2)并将新对象放在那里。

如果我想有一个自定义分配功能,那么:

  1. 使用第一种方法,我会看到我填充了多少,然后将我的新对象放在那里(并将对象的大小添加到我填充的内存变量中)。
  2. 使用第二种方法,我会有一个页面列表(向量?数组?),然后查找当前页面,然后在所选页面上使用类似于 1 的方法。

最终,我也需要一种释放内存的方法,但我可以弄清楚那部分。

所以我的问题是:解决此类问题的最有效方法是什么?是选项 1、选项 2 还是我在这里没有考虑过的其他选项?是否需要/足以为现实情况得出结论? 我了解不同的操作可能会执行不同的操作,但我正在寻找一个整体指标。

0 投票
4 回答
3512 浏览

c - 重新分配一个二维字符数组

我有以下代码

我得到这个重新分配错误:

我这里有什么问题???

谢谢,问候

0 投票
5 回答
4885 浏览

c - realloc 和 free 导致“双重释放或损坏”

忍受我。我已经 8 年没有用 c 编码了,我完全困惑为什么我的字符串操作不起作用。我正在编写一个永远循环的程序。在循环中,我初始化了两个 char 指针,每个指针都传递给一个将文本添加到 char 指针(数组)的函数。函数完成后,我打印 char 指针并释放两个 char 指针。但是程序在 7 次迭代后终止,并出现以下错误消息

* 检测到 glibc * ./test: 双重释放或损坏 (fasttop): 0x0804a168 ***

0 投票
1 回答
317 浏览

c - c realloc 结构 - g_hash_table

我正在做类似于以下代码的事情。我已经完成了一次AddtoStructFunction()填充mystruct。现在,我想做的是将每个新条目直接附加mystruct到. mystructg_hash_tablemystruct

这样做的好方法是什么?重新分配每个新条目?