我对realloc的工作原理感到困惑。如果我使用malloc分配了一块缓冲区,并将数据复制到该缓冲区,比如说"AB": +------------+ | A | B | \0 | +------------+ 我使用realloc重新分配了缓冲区,是否会导致数据丢失(即使只有一个字节)?或...
之前我的一个朋友告诉我不要使用 realloc ,因为它是不安全的,但他不能告诉我原因,所以我对这个问题进行了一些研究,最接近我的怀疑的参考资料是: 第一篇文章 第二篇文章 我想知道是否可以在我的代码中继续使用 realloc ,如果它不安全,是否有其他方法来重新分配内存?
根据这里所写,new 在 free store 中分配内存而 malloc 使用 heap,这两个术语通常指的是相同的东西。 根据这里所写,realloc 可能会将内存块移动到新位置。如果 free store 和 heap 是两个不同的内存空间,那么会有问题吗? 具体而言,我想知道是否可...
如果按照以下步骤进行:int* array = malloc(10 * sizeof(int)); 然后我使用realloc:array = realloc(array, 5 * sizeof(int)); 在第二行(且仅在第二行),它能返回NULL吗?
我在阅读关于realloc的内容时,对其中提到的一个点感到困惑。考虑下面的代码:#include <stdio.h> #include <stdlib.h> int main () { int* ptr = NULL; ptr = realloc(p...
一个不同的问题启发了以下想法: 当 std::vector<T> 增加其容量时,是否必须移动所有元素? 据我所知,标准行为是底层分配器请求一个新大小的整个块,然后将所有旧元素移动过去,然后销毁旧元素,最后释放旧内存。 在标准分配器界面给出的情况下,这种行为似乎是唯一可能的正确...
这次我不太知道该怎么起标题。首先,我想说我在本页面上看到了一些关于如果问题与"作业"有关就需要警告的评论。我的问题确实是关于作业的,但已经完成了,我只是想更好地理解代码运行原理。 我已经阅读了一些帖子和书籍,但我认为我仍然缺少一些东西。 我在我写的代码中有2行代码不是很理解。这个作业是关于...
我使用realloc函数来重新调整内存空间大小: char **get_channel_name(void) { char **result; int n; result = (char **) 0; for (elem = snd_mixer_fir...
我知道平凡可复制对象可以安全地通过malloc复制到适当的存储位置1,目标对象将与源对象具有相同的值。 使用realloc是否也可能呢?也就是说,如果realloc一些包含类型T的对象的存储空间,并且realloc决定移动和复制该块,那么新分配的存储空间中的对象是否完好无损并已开始其生命周期...