读书人

关于free()函数的有关问题

发布时间: 2012-04-02 19:58:59 作者: rapoo

关于free()函数的问题
例:

char *p = malloc(10 * sizeof(char));

strcpy(p,"123456789");

free(p);

当使用函数free(p)之后,释放的是用malloc()分配的空间,
实际上指针p还是存在的。不过此时的指针p变成了一个野指针。

应该还需要加一句:
p = NULL;

是这样理解吗?

[解决办法]
对,p还是指向原来分配的空间,为了防止野指针引起误操作,所示赋值p为NULL
楼主代码中:char *p = malloc(10 * sizeof(char)); 应该有个强制转换
[解决办法]

探讨
例:

char *p = malloc(10 * sizeof(char));

strcpy(p,"123456789");

free(p);

当使用函数free(p)之后,释放的是用malloc()分配的空间,
实际上指针p还是存在的。不过此时的指针p变成了一个野指针。

应该还需要加一句:
p = NULL;

是这样理解吗?

[解决办法]
回答正确
使用free(p)后,只是释放了p指向的空间,而p本身仍然存在,并且还是指向那个地址。为了防止可能再次使用p时,忘了那个地址已经释放,所以在使用free(p)之后,一定要将p赋值为null
另外,申请动态内存时应该加上指针类型:char *p = (char *) malloc(10 * sizeof(char));
[解决办法]
恩,释放的是指针指向的地址空间。指针变量本身还是存在的
[解决办法]
探讨
例:

char *p = malloc(10 * sizeof(char));

strcpy(p,"123456789");

free(p);

当使用函数free(p)之后,释放的是用malloc()分配的空间,
实际上指针p还是存在的。不过此时的指针p变成了一个野指针。

应该还需要加一句:
p = NULL;

是这样理解吗?

[解决办法]
探讨
野指针不能用,NULL指针也不能用啊#83喜欢给NULL就弄喽

[解决办法]
C里面不需要强制转换吧
C++才需要吧

C里面void * 可以赋值给任意指针
不过可读性确实更差,不转的话

读书人网 >C语言

热点推荐