#include<iostream>
int main()
{
char* name = NULL;
free(name);
free(name);
free(name);
system("pause");
return 0;
}
//正常运行
#include<iostream>
int main()
{
char* name = (char*)malloc(10);
free(name);
free(name);
system("pause");
return 0;
}
//运行异常
#include<iostream>
int main()
{
char* point = (char*)malloc(10);
if (point != NULL) {
free(point);
point = NULL;
}
system("pause");
return 0;
}
//运行正常
free:一次free一个指针的时候,只是清空该指针所指的堆中的对应空间,但该指针变量在栈中的值并没有没清空,它还是指向原来分配的内存空间(但是该内存空间已经不属于该指针了,CPU随时可把该指针原来所指的空间分配给任何一个指针变量)。这时,再free一次时,由于该指针已经没有堆空间与之对应了,所以编译器将会提示出错。