一些简单的问题,但是却没有意识到。关于代码中double free的错误。
伪代码:
char * str = NULL;
str = (char *)malloc(sizeof (char)*num); //申请内存
free(str);
在一些循环函数中,我们经常会通过判断str是否为NULL,来判断数据的有效性,那么问题就来了
接上面代码:
if(str!=NULL)
{
printf("str is not null = %s ",str);
}
敲黑板:free后的str的值是否为空?
答案是肯定不是的。因为free操作只是释放了str指向地址的内存,str的值并没有改变。所以str的值依然存在。只不过现在指向的地址就是一段野内存,不可访问。
如果这个时候对这位置的内存进行访问就会产生断错误,再进行free的话就会double free。
其实是常识,自己搞错了,写一下提醒自己。