如何在C语言中释放字符数组的内存

42

我创建了一个字符数组,代码如下:

char arr[3] = "bo";

我该如何释放与我命名为“arr”的数组相关联的内存?


5
你应该声明为char arr[] = "bo",这样编译器就能计算出长度并确保有足够的空间放置空终止符。如果你将代码更改为char arr[3] = "boo";,那么就没有空终止符了。 - David Heffernan
4个回答

78

当函数执行结束时,局部变量会自动释放,你不需要自己手动释放它们。你只需要释放动态分配的内存(例如使用malloc分配的内存),因为它是在堆上分配的:

char *arr = malloc(3 * sizeof(char));
strcpy(arr, "bo");
// ...
free(arr);

更多关于动态内存分配的信息:http://en.wikipedia.org/wiki/C_dynamic_memory_allocation


16

你根本不需要释放任何东西。因为你从未动态获取过任何资源,所以没有任何需要释放的资源,甚至是允许释放的。

(这与你声明int n = 10;时相同:不存在需要手动管理的动态资源。)


11

arr关联的内存在arr超出作用域时会自动释放。它可以是局部变量,也可以是静态分配的,但不是动态分配的。

一个简单的规则是,你只能调用由malloccallocrealloc调用返回的指针上的free()


1
char arr[3] = "bo";

arr将内存放入堆栈段中。如果arr超出作用域,它将自动释放。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接