首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-02 
关于free()函数的问题例:char *p malloc(10 * sizeof(char))strcpy(p,123456789)free(p)当使用函数

关于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 * 可以赋值给任意指针
不过可读性确实更差,不转的话

热点排行