一些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)。

posted @   Biiigfish  阅读(290)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示