一些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");
}
}
#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)。
——————
无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。
无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!