21得票4回答
调用指针两次会导致免费错误

我在讲座中学习到,对指针调用free()两次非常不好。我知道释放完指针后,将其设置为NULL是一个好习惯。 然而,我从未听说过任何解释为什么这样做。据我所知,malloc()的工作方式应该在技术上跟踪它已分配并提供给您使用的指针。那么为什么它不知道通过free()接收到的指针是否已释放? ...

19得票3回答
C语言 - 释放指针数组是否也会释放它们所指向的内存?

假设我有一个指向结构体的指针数组,每个结构体包含一个字符串,就像这样:printf("%s\n", array[0]); 输出结果为:Hello. 如果我执行free(array),是否会释放array[0]指向的内容("Hello.")? 我已经花了几个小时手动释放每个元素,但只是导致程序...

19得票4回答
fclose()之后再free()?

假设我有以下程序:#include <stdio.h> int main () { FILE * pFile; pFile = fopen ("myfile.txt","r"); fclose (pFile); //This never happ...

18得票5回答
动态创建/释放运行时窗体的正确方式是什么?

我总是注重内存使用来创建我的应用程序,如果你不需要它,那就不要创建它,这是我的想法。 无论如何,以以下内容为例:Form2:= TForm2.Create(nil); try Form2.ShowModal; finally Form2.FreeOnRelease; end; 我认为...

18得票2回答
malloc()和free()在哪里存储分配的大小和地址?

malloc()和free()(Linux GCC)在哪里存储已分配地址及其大小?我读到有些实现将它们存储在实际分配的内存之前的某个地方,但我无法在我的测试中确认这一点。 背景:也许有人对此有其他提示: 我正在尝试通过分析进程的堆内存来确定另一个进程中字符串的当前值。访问进程堆内存并浏览其中...

17得票6回答
如何避免在C语言中进行每个错误检查后出现长链式的free(或delete)?

假设我非常谨慎地编写代码,并始终检查我调用的所有函数的返回类型。 因此我会这样写:char* function() { char* mem = get_memory(100); // first allocation if (!mem) return NULL; ...

17得票6回答
如何释放从函数返回的指针?

#include <stdio.h> #include <string.h> #include <stdlib.h> char* f(void) { char *x; x = malloc(sizeof(char) * 4); strcpy(x...

17得票8回答
设计你自己的free()函数

今天,我参加了一次面试,面试官问了我这个问题, 告诉我你要如何设计自己的free()函数来释放已分配的内存。 它如何比C语言默认的free()函数更高效?你有什么结论吗? 我非常困惑,无法想出设计的方法。 你们觉得呢? 编辑:由于我们需要了解如何编写mall...

17得票11回答
为什么在垃圾回收语言中不允许使用free()函数?

我在维基百科上阅读了C#的文章,并发现: 托管内存不能被显式释放;相反,它会自动进行垃圾回收。 为什么在具有自动内存管理的语言中,人工管理甚至不被允许?我可以看出,在大多数情况下,这是不必要的,但在内存紧缺且不想依赖于智能垃圾回收器的情况下,手动管理是否有用?

16得票9回答
为什么free(p)不会将p设置为NULL?

为什么释放内存的free()函数不能成为标准行为呢? 多个指针指向同一个对象:#include <stdlib.h> #include <stdio.h> void safefree(void*& p) { free(p); p = NULL; } ...