1、malloc完为什么一定要free?
A-通过malloc得到的内存有两种方式可以得到释放:程序结束,free释放。如果一个程序不停的malloc而不释放,会出现什么问题?你可以试试,你的狗狗很快就会汪汪叫的~~~可以用下面的程序试。。。这就是所谓的内存泄露,杀人于无形。当然,如果不是在无限的循环当中,你的程序马上就会终结的话,比如在cgi里,没什么好担心的----至少linux里可以这样,具体看操作系统内存管理机制。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
char* p;
while(1)
{
p = (char*)malloc(7);
strcpy(p,"hello");
}
}
#include <stdlib.h>
#include <string.h>
int
main()
{
char* p;
while(1)
{
p = (char*)malloc(7);
strcpy(p,"hello");
}
}
2、指针为什么要初始化?
A-即使你用了一个没初始化的指针,编译器也不会给你任何提示;你也不知道一个没有初始化的指针会做什么蠢事。有用户空间隔离的操作系统编程还好一点,程序崩溃了,操作系统还好的,你可以慢慢找错误;要是没用户空间隔离的嵌入式编程,那就废了。当然,别指望别人的程序里能处理这种意外,你没法确定别人怎么做的。
#include <stdio.h>
#include <stdlib.h>
int
main()
{
char* p;
free(p);
}
#include <stdlib.h>
int
main()
{
char* p;
free(p);
}
注意:将指针初始化为NULL后,也就是指针指向了地址0x0000,如果试图对这个地址里的内容进行操作(dereference a NULL pointer),也将判定为段错误(segmentation fault)。