目录
C语言-动态内存管理
动态内存管理,就是程序执行的过程中,由程序编写者动态的申请和回收内存空间。
C语言内存的动态分配一般通过库函数实现,主要有malloc和free函数。位置:在堆上。
连接:https://blog.csdn.net/USA_AM_1966/article/details/89509589
相关库函数
1.malloc函数
函数声明:
void *malloc(unsigned int size);
功能说明:分配size字节的连续空间,返回值分配空间起始地址;
内存空间不足,返回空(NULL,即0)。
用法:
int *p = malloc(sizeof(int));
2.free函数
函数声明:
void free(void *p);
功能说明:释放动态开辟的空间,无返回值。
用法:
free(p);
内存耗尽
使用动态内存分配,必须及时释放内存,否则可能会引起内存耗尽,程序崩溃。
(编程人员崩溃【找不到bug】,产品经理崩溃【规定时间内,功能没有实现】,项目组崩溃【由于项目逾期,年终奖没了,绩效奖金没了】,公司崩溃【项目没有按时交付,信誉受损】,行业崩溃【没有优秀的产品,只能选择备选,长期以往,行业出现大量问题需要解决,发展停滞不前】,相关产业链崩溃【相关产业因为供应链不均衡,出现木桶效应】,国家崩溃【多个产业受到波及,经济发展受到严重影响】。--蝴蝶效应)
野指针
无效的指针。
野指针产生原因:
1.指针变量未初始化。
指针变量创建时被初始化,设置为NULL或者让它指向合法内存。
2.指针释放后未置空
释放指针后,应该立即将指针置为NULL。
用例:
free(p);
p = NULL;
动态内存分配应用经验
1.数组
C语言的早期标准中,定义数组必须用常量大小,不能用变量。
用法:
char str[101];
现在定义数组可以用变量指明大小。
用法:
if(in_string == 0) return; if(strlen(in_string) == 0) char strTemp[strlen(in_string)+1] ;
C++的string是一个字符串,非常好用。
2.链表
C语言经典数据结构,相当于一个动态的数据体结构,结构巧妙,功能强大。
3.建议
中国几乎没有纯C语言程序员,除了嵌入式开发,以C语言为基础学习其他编程语言,如
第一级Java,Python,C++;
第二级C#,Visual Baisic,JavaScript,PHP,SQL;
第三级R,Swift,Go,MATLAB,Assmbly language,Ruby,PL/SQL.
第四级......
谢谢阅读,欢迎补充。