我创建了一个字符数组,代码如下:
char arr[3] = "bo";
我该如何释放与我命名为“arr”的数组相关联的内存?
当函数执行结束时,局部变量会自动释放,你不需要自己手动释放它们。你只需要释放动态分配的内存(例如使用malloc
分配的内存),因为它是在堆上分配的:
char *arr = malloc(3 * sizeof(char));
strcpy(arr, "bo");
// ...
free(arr);
更多关于动态内存分配的信息:http://en.wikipedia.org/wiki/C_dynamic_memory_allocation
你根本不需要释放任何东西。因为你从未动态获取过任何资源,所以没有任何需要释放的资源,甚至是允许释放的。
(这与你声明int n = 10;
时相同:不存在需要手动管理的动态资源。)
arr
关联的内存在arr
超出作用域时会自动释放。它可以是局部变量,也可以是静态分配的,但不是动态分配的。
一个简单的规则是,你只能调用由malloc
、calloc
或realloc
调用返回的指针上的free()
。
char arr[3] = "bo";
arr将内存放入堆栈段中。如果arr超出作用域,它将自动释放。
char arr[] = "bo"
,这样编译器就能计算出长度并确保有足够的空间放置空终止符。如果你将代码更改为char arr[3] = "boo";
,那么就没有空终止符了。 - David Heffernan