原创 【博客大赛】《C和指针》摘抄整理型笔记七

2014-10-9 15:59 1346 14 15 分类: 处理器与DSP 文集: C和指针

/*

读书笔记类型多种多样,有摘抄型的,有感想型的,有批注型的,有摘要型的……

现在正在研读《C和指针》,其中有很多我认为必要的知识点,摘抄并简单整理了一下,记录在这里。

*/

 

43. 动态分配内存函数

   void *malloc( size_t size );

malloc所分配的是一块连续的内存。

malloc的参数就是需要分配的内存字节(字符)数,其类型为size_t,定义于stdlib.h之中——

typedef unsigned int size_t;

 

malloc返回一个指向被分配的内存块起始位置的指针,该指针为void *类型的指针。一个void *类型指针可以转换为其他任何类型指针。对于要求边界对齐的机器,malloc所返回的内存的起始位置,将始终能满足对边界对齐要求最严格的类型的要求。如果没有足够的内存,malloc返回一个NULL指针,因此对每个从malloc返回的指针进行检查,确保它并非NULL是非常重要的。

 

44. 另一个内存分配函数

   void *calloc( size_t num_elements, size_t element_size);

calloc也用于分配内存。malloccalloc的主要区别是后者返回指向内存的指针之前把内存的值初始化为0;另一个区别是二者参数不同,calloc的参数包括所需元素的数量和每个元素的字节数,calloc可以根据这些值计算出总共需要分配的内存。

 

45. 再一个内存分配函数

   void *realloc( void *ptr, size_t new_size );

realloc函数用于修改一个原先已经分配的内存块的大小。若使原内存扩大,则原内存的内容保持不变,新增加的内存添加到原内存的后面,且新的内存不以任何方法进行初始化;若使原内存缩小,则在原内存尾部部分被拿掉,剩余内存保持不变。如果原内存无法改变大小,realloc将分配另一块正确大小的内存,并把原先那块内存内容复制到新的内存块上。因此,在使用realloc之后,就不能使用指向旧内存的指针,而是应该改用realloc所返回的新指针。如果realloc函数的第1个参数是NULL,那么它的行为就和malloc函数一样了。

 

46. 释放内存的函数

   void free( void *pointer );

free的参数要么是malloccallocrealloc返回的值,要么是NULL,如果是NULL,那不会产生任何效果。

 

47. 如果要获得比如存储25个整数的内存,一个好的技巧是:

   int *pi;

   pi = malloc( 25 * sizeof( int ) );

这种方法可移植性好一些,即使整数长度不同的机器,也能获得正确的结果。

 

48. 常见动态内存错误:

①不检查malloc函数(callocrealloc)返回的指针是否为NULL

②访问动态分配的内存之外的区域;

③向free函数传递一个并非由malloc函数(callocrealloc)返回的指针;

④在动态内存被释放之后再访问它。

 

49. 内存泄漏(memory leak)是指内存被动态分配后,当它不再使用时未被释放。内存泄漏会增加程序的体积,有可能会导致程序或系统崩溃。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1776833 2014-10-14 11:00

//deleted

相关推荐阅读
飞言走笔 2017-01-06 21:56
2017,新的博客旅程
EDNChina 改版终于成功了!祝贺! 2017年,开始新的旅程~ ...
飞言走笔 2016-06-01 10:17
【博客大赛】《白鹿原》读后
《白鹿原》这本书已经买了很久,多次以来,都是只翻看几页,顶多几章就放下了,觉得这是一个大部头,得有足够的时间才行。前几天陈忠实先生去世的消息传来,让我很震惊和惭愧。 一口气读完这本书,畅快淋漓,又意...
飞言走笔 2016-03-26 16:42
【博客大赛】《毛斯朝》读后
这本书最早是在凤凰卫视曾子墨主持的一期关于沈志华先生的《世纪大讲堂》节目中知晓的。但是一直拖到今天才读完。 说实话,书的主要内容与当前官方的宣传口径有很多不一致的地方,而沈先生作为中国掌握苏联档...
飞言走笔 2016-03-08 13:46
【博客大赛】蓝牙4.0低功耗技术及其认证要求
详见附件 ...
飞言走笔 2016-02-02 14:20
【转】蓝牙4.0协议官方手册(一)——通用属性配置文件
转自:http://blog.csdn.net/jinzhichaoshuiping/article/details/43370009 通用属性配置文件 (GATT)——该说明书定义了通用属性配置...
飞言走笔 2016-01-31 23:24
【博客大赛】脑洞大开、三观重塑——《人类简史》读后
终于读完了《人类简史》,没有把这本书拖到二月份,这也是2016年读完的第一本书。之前也有所耳闻,但是没有太在意,倒是罗胖子的跨年演讲上偶然提到,不知怎么就勾起了阅读此书的欲望。 本文的标题用了“脑洞...
EE直播间
更多
我要评论
1
14
关闭 站长推荐上一条 /3 下一条