【发布时间】:2015-04-14 01:45:29
【问题描述】:
这是我的代码。我正在创建一个数组,给元素一些值,然后释放和打印。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// malloc the array
int* array = (int*) malloc(sizeof(int)*3);
// give some values
int i;
for(i=0; i<3; i++) array[i] = 1 + i*i;
// attempt to free
free(array+0);
free(array+1);
free(array+2);
// print array elements
for(i=0; i<3; i++) printf("%d , ", array[i]);
return 0;
}
它只释放第一个和第二个元素(打印随机数),但第三个元素保留在那里。我该怎么做才能解决这个问题?如果我做错了什么(例如错误地使用免费),请也指出这一点。谢谢。
【问题讨论】:
-
这是错误的,正如 zenith 所指出的那样,但即使不是这样,取消引用
freed 指针听起来像是未定义的行为 -
一个
free()每malloc(),您释放的空间是预期的三倍。 malloc/free 处理内存区域,他们不知道您如何构建这些区域。 malloc 需要知道区域的大小,但该表达式在实际调用之前会被评估(产生一个数字)。如果你做一个malloc,你只需要做一个free(用你从malloc收到的指针作为参数)。