一些c语言的疑问

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");
        }
}

2、指针为什么要初始化?

A-即使你用了一个没初始化的指针,编译器也不会给你任何提示;你也不知道一个没有初始化的指针会做什么蠢事。有用户空间隔离的操作系统编程还好一点,程序崩溃了,操作系统还好的,你可以慢慢找错误;要是没用户空间隔离的嵌入式编程,那就废了。当然,别指望别人的程序里能处理这种意外,你没法确定别人怎么做的。

#include        <stdio.h>
#include        
<stdlib.h>

int
main()
{
        
char* p;
        free(p);
}

 注意:将指针初始化为NULL后,也就是指针指向了地址0x0000,如果试图对这个地址里的内容进行操作(dereference a NULL pointer),也将判定为段错误(segmentation fault)。

——————
无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。
原文地址:https://www.cnblogs.com/pied/p/1766602.html