一道有关内存的题,该如何处理
一道有关内存的题char *strmalloc(100)strcpy(str,hello)free(str)printf(%s,str)输出结果是hell
一道有关内存的题
char *str=malloc(100);
strcpy(str,"hello");
free(str);
printf("%s",str);
输出结果是hello ,请问为什么?
[解决办法]
挺好。
这就叫“未定义的行为”,出现任何情况都是可能的。
[解决办法]
[解决办法]free释放后,该指针变成了野指针,其指向的地址是不确定的。当然也有可能指向原来的位置,有可能会输出该区域的字符。但是这样做是危险的,你不能确定该指针free后还会指向该位置。如果其他操作对该区域进行了写,那么你输出的就不是原来的字符了。
[解决办法]free 只是切断了指针与空间的联系,但指针还是那指针(你并为赋新值);内存还是那内存(系统既没有搽除它,你也没有用新值去覆盖它)
因此:
free(ptr);
ptr = NULL;
[解决办法]free是告诉你这段内存可写,但是写不写要看系统有没有其他的东西要放到哪里。
你不信可以那样,记下str的地址,将你的程序关闭以后,然后输出地址里面的内容,估计就是空了。
free就是先标记这段内存可用,等你程序关闭后,系统会自动处理的。
[解决办法][解决办法]