41得票5回答
我可以假设调用realloc并使用更小的尺寸会释放剩余空间吗?

让我们来看一下这段非常简短的代码片段:#include <stdlib.h> int main() { char* a = malloc(20000); char* b = realloc(a, 5); free(b); return 0; } ...

39得票7回答
free()函数是否会清空内存?

直到今天,我一直相信在内存空间上调用free()会释放该空间以供进一步分配,而不需要进行其他修改。特别是考虑到这个SO问题已经明确说明free()不会清空内存。 然而,让我们来看看这段代码(test.c):#include<stdlib.h> #include<stdio....

36得票3回答
正确的方法释放已返回变量的内存

我创建了一个函数来获取用户输入。它要求为包含用户输入的变量分配内存;然而,该变量在函数结束时被返回。正确的方法是什么,以释放已分配的内存/返回变量的值? 以下是代码:char *input = malloc(MAX_SIZE*sizeof(char*)); int i = 0; char c...

36得票4回答
C程序中的“double free or corruption (!prev)”错误

运行c程序时,我遇到了以下错误: *** glibc detected *** ./a.out: double free or corruption (!prev): 0x080b8008 *** 我认为这是由于程序结束时调用了free(),但我无法确定在此之前malloc分配的内存被释...

36得票3回答
C free(): 无效指针

我正在自学C语言。我的目标是编写一个C函数,遍历查询字符串并在"&"和"="处进行分割。但是我遇到了Valgrind报错的困难。 ==5411== Invalid free() / delete / delete[] / realloc() ==5411== at 0x402AC38:...

34得票3回答
malloc实现方式?

我正在尝试为C语言实现malloc和free函数,但我不确定如何重复利用内存。我目前有一个长这样的struct:typedef struct _mem_dictionary { void *addr; size_t size; int freed; } mem_dict...

33得票5回答
链表 - 如何释放使用malloc分配的内存

我有一个非常简单的C代码用于构建单向链表,我使用malloc动态地为每个节点分配内存。在代码的结尾,我想要释放所分配的每个节点的内存,但不确定如何做到这一点 - 如果我从头节点开始释放,后续节点的指针会丢失并导致内存泄漏。 另一种方式是从头节点开始,并将节点指针存储在一个单独的指针数组中或类...

32得票3回答
在分配内存的同时,malloc是否会预留更多的空间?

我在测试程序中观察到以下行为: 我使用malloc()分配了1 MB的内存,然后在sleep(10)后使用free()释放它。我这样做了五次。当程序运行时,我会观察top中的内存占用情况。 一旦使用free()释放,我期望程序的虚拟内存(VIRT)消耗减少1 MB。但实际上并没有。它保持稳...

30得票6回答
在C语言中分配内存并保存字符串

我在想为什么下面的代码不能工作int main(int argc, char **argv) { char *test = (char*) malloc(12*sizeof(char)); test = "testingonly"; free(test); } 经...

28得票6回答
C++释放静态变量

我希望我的类拥有一个指向动态分配内存区域的静态指针。我知道如何初始化它 - 在我的情况下,当第一个对象需要它时,我会初始化它。然而,我不知道在什么时候/什么地方释放它。我希望程序终止时可以释放它。 也许我可以在我的对象析构函数中释放指针,但是那样的话我就必须维护一个对象计数器来确定在对象是最...