超出范围会释放(字符)数组的内存吗?

与我之前的问题非常相关,但我发现这是一个单独的问题,我无法找到一个可靠的答案。

是否超出范围释放(字符)数组使用的内存?

一个例子:

void method1() { char str[10]; // manipulate str } 

所以在method1调用之后,str(10字节)使用的内存是否被释放,或者我是否需要在此上显式调用free?

我的直觉告诉我这只是一个简单的原始类型数组,因此它会自动释放。 我有点怀疑,因为在C中你不能假设任何东西被自动释放。

在这种情况下,你不需要免费拨打电话。 值“str”是基于堆栈的值,当退出该特定方法/范围时将清除该值。

您只需要对通过malloc显式创建的值调用free。

它会自动释放。 如果你没有malloc它,你不需要释放它。 但这与它是一个“原始类型的简单数组”无关 – 如果它是一个结构数组,它将被释放。 它被释放,因为它是一个局部变量。

鉴于你在问这些非常基本的问题,我不得不问你使用的是哪本C教科书。 就个人而言,我不相信你可以在不阅读Kernighan&Ritchie的The C Programming Language的情况下学习C,它非常清楚地解释了所有这些内容。

是的,它被“释放”。 (但不是免费的)。)

由于str是一个自动变量,它只会持续与其范围一样长,直到function块结束。

请注意,你只有free()你的malloc()。

是的,一旦method1返回,内存将自动释放。 str的内存在堆栈上分配,一旦方法的堆栈帧被清除就被释放。 将其与堆上分配的内存(通过malloc )进行比较,您必须明确释放它。

不,这种局部变量是在堆栈上分配的,所以当你从过程返回时,内存可用于下一个函数调用,它将使用内存作为其堆栈帧。

如果使用malloc() ,则会在堆上分配空间,必须显式释放该空间。

我认为它的释放不是因为它是原语,而是它是一个局部变量,它将被分配在堆栈而不是堆上。 如果你没有malloc它,那么就我记忆中你无法释放它。

我最近在C / C ++方面有点生疏,但我认为你是对的。 只要你没有动态分配那个内存,你应该没问题。

是的,当它超出范围时,它会被“释放”。
不,你不必明确释放它。

char数组在堆栈上分配,因此当您从函数返回时,该堆栈空间可以重复使用。 您不需要显式释放内存。

好的经验法则:如果你是malloc ,你必须free