654得票20回答
当程序终止前没有释放malloc分配的内存,会发生什么?

我们都被教导必须释放每个分配的指针。然而我有点好奇,如果不释放内存会有什么实际代价。在一些明显的情况下,比如在循环或线程执行的一部分中调用 malloc() 时,释放内存非常重要以避免内存泄漏。但是考虑以下两个示例: 首先,如果我的代码类似于这样:int main() { char...

513得票11回答
免费软件如何确定免费的程度?

在C编程中,您可以将任何类型的指针作为free函数的参数传递,那么它如何知道要释放的内存大小呢?当我将指针传递给某个函数时,我必须同时传递大小(例如,一个有10个元素的数组需要接收10作为参数以了解数组的大小),但是在free函数中不必传递大小。为什么不需要,并且我可以在自己的函数中使用这种技...

318得票13回答
malloc()和free()是如何工作的?

我想了解 malloc 和 free 如何工作。int main() { unsigned char *p = (unsigned char*)malloc(4*sizeof(unsigned char)); memset(p,0,4); strcpy((char*)p...

195得票23回答
释放后将变量设置为NULL

在我的公司有一条编码规则,即在释放任何内存后,将变量重置为NULL。例如...void some_func () { int *nPtr; nPtr = malloc (100); free (nPtr); nPtr = NULL; return...

149得票11回答
当ptr为NULL时,使用free(ptr)会破坏内存吗?

从理论上讲,我可以说free(ptr); free(ptr); 由于我们正在释放已经被释放的内存,这是一种内存损坏。但如果 free(ptr); ptr=NULL; free(ptr); 由于操作系统会以未定义的方式表现,因此我无法进行实际的理论分析来确定正在发生什么。 无论我做什么,这是...

120得票9回答
如何追踪“双重释放或损坏”错误

当我运行我的(C++)程序时,它会崩溃并显示以下错误:   * glibc detected * ./load: double free or corruption (!prev):   0x0000000000c6ed50 *** 如何跟踪错误? 我尝试使用打印语句 (std::c...

93得票12回答
为什么C语言中的`free`函数不需要指定要释放的字节数量?

仅仅为了清晰明了: 我知道malloc和free是在C库中实现的,该库通常从操作系统中分配内存块,并进行自己的管理,将较小的内存块传递给应用程序并跟踪分配的字节数。这个问题不是关于 free如何知道释放多少内存。 相反,我想知道为什么free最初就是这样设计的。作为一种低级语言,我认为要求C...

92得票12回答
无法在C中释放常量指针

我如何释放一个const char*?我使用malloc分配了新的内存,在尝试释放它时,总是会收到 "不兼容的指针类型" 错误。 引起这个错误的代码大致如下:char* name="Arnold"; const char* str=(const char*)malloc(strlen(nam...

83得票3回答
为什么要将cast free的返回值转换为void?

我正在阅读一本书(Programming with POSIX Threads, Butenhof, 1997),其中使用了C语言,我遇到了下面这行代码:(void)free(data); 这里,data只是指向一个已分配结构体的指针。data = malloc(sizeof(my_struc...

73得票8回答
在C语言中,free和malloc是如何工作的?

我正在试图弄清楚如果我尝试从“中间”释放指针会发生什么。例如,看一下以下代码:char *ptr = (char*)malloc(10*sizeof(char)); for (char i=0 ; i<10 ; ++i) { ptr[i] = i+10; } ++ptr; ++...