c++的“free”

来源:百度知道 编辑:UC知道 时间:2024/06/18 14:23:57
程序如下:
char *str = (char *) malloc(100);
strcpy(str, "hello");
free(str);
if(str != NULL)
{
strcpy(str, "world");
printf(str);
}
书上结果:输出“world”。
我用vc6.0测试,输出结果是一堆乱码。我把“free(str)”放到最后输出了world。哪位朋友给看看,书上答案对吗?谢谢!
我用vc6.0的结果还是一堆“屯”。我个人觉得书上这个有问题。谢谢各位朋友。

书上怎么能这么教人呢。
free以后就不能再用这块内存。
因为说不定它又被分给其他变量用。
那就全乱了,而且不好查错。

实际应用中这种写法是大忌,
所以讨论这样的输出结果是没有意义的。

记住free一定要放到最后!还有每次最好free后清零。
free(str);
str=NULL;

  函数名: free
  功 能: 与malloc()函数配对使用,释放malloc函数申请的动态内存。(另:对于free(p)这句语句,如果p 是NULL 指针,那么free 对p 无论操作多少次都不会出问题。如果p 不是NULL 指针,那么free 对p连续操作两次就会导致程序运行错误。)
  用 法: void free(void *ptr);
  头文件:malloc.h或stdlib.h
  作用:释放malloc(或calloc、realloc)函数给指针变量分配的内存空间的函数使用后该指针变量一定要重新指向NULL,防止野指针出现,有效 规避误操作。

Windows里被释放的堆会被用0xFEEE填充用来监视对释放后内存的写入。

----

另一方面,这里输出的就应该是world,不可能是乱码。

理论上应该是对的,

我的电脑输出是world 啊