`
- 浏览:
4150024 次
-
C和指针 (pointers on C)——第十一章:动态内存分配(上)
第十一章 动态内存分配
数组在声明的时候,本身作为一个指针常量,它在编译时候内存就已经被分配好了。但是有时候程序不知道这个数组到底有多长,所以,为了防止内存的浪费,C提供了动态内存分配的策略。
其实,作为独立的一章,本章显得内容不多。malloc,free,calloc,realloc就没有了,但是它包含很多用法,也有很多陷阱。
总结:
malloc和calloc函数都用于动态分配一块内存,并返回一个指向该块内存的指针。malloc返回的是一个 void *的指针。
malloc的参数就是需要分配的内存的字节数。calloc的参数是个数*单位长度。
realloc函数可以改变一块已经动态分配内存的大小。
void *malloc(size_t size); 或者 void *malloc((num) * sizeof(...))
void free(void *pointer);
void *calloc(size_t num_elements, size_t element_size);
void realloc(void *ptr, size_t new_size);
如果realloc的第一个参数是ptr == NULL,那么它的返回值和malloc一模一样,一个NULL的指针。
当一块内存不再使用时,应该调用free函数归还给内存池。但是如果不是malloc、calloc或者realloc函数返回的,它是不能作为参数传递给free。
内存泄露是指内存被动态分配以后,它不再使用时未被释放。内存泄露会增加程序的体积。
警告:
1、不检查从malloc函数返回的指针是否为NULL。
#include <stdlib.h>
#include <stdio.h>
array = malloc(10 * sizeof( int ));
if(array == NULL)
exit (EXIT_FAILURE);
2、访问动态分配的内存之外的区域。
3、向free函数传递一个并非由malloc函数返回的指针。
根本不会有作用。
4、在动态内存被释放之后再访问它。
编程提示:
1、动态内存分配有助于消除程序内部存在的限制。
2、使用sizeof计算数据类型的长度,提高程序的可移植性。
当32位机、16位机时候,int是不同字节数的。因此最好sizeof(int)。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Pointers On C C和指针 英文版 答案
c与指针这本书的例子程序,原书是国外的大牛写的 我拿来分享一些
C语言课件:第十章 指针(Pointers).ppt
c和指针(pointers on c)习题答案(课后答案补充)
pointers on c 第二章课后编程练习源代码
Pointers On C brings the power of pointers to your C programs. Designed for professionals and advanced students, Pointers on C provides a comprehensive resource for those needing in-depth coverage of ...
C语言四书之一。希望对C语言出血者有所帮助。
经典的书籍,添加了目录,参阅交流后请购书。
Pointers on C, 针对指针的基本和高级特性的介绍
pointers on c第五章编程练习1,从标准输入读取字符,并将其中的大写字母转换为小写字母后,写到标准输出中
Chapter 1 Chapter 2 Chapter 3 Chapter 4 Chapter 5 Chapter 6 Chapter 7 Chapter 8 Chapter 9 Chapter 10 Chapter 11 Chapter 12 Chapter 13 Chapter 14 Chapter 15 Chapter 16 Chapter 17 Chapter 18 Contents A ...
函数功能:在一个字符串中进行搜索,查找所有在一个给定字符集合中出现的字符
判断一个n*n的矩阵是否为单位矩阵。通过VC6.0编译
C语言:第十章 指 针(Pointers).ppt
POINTERS ON C 第九章编程练习11统计某个单词出现的个数,示例为单词the。VC6.0编译通过
回溯法解决N皇后问题,解空间的形式输出结果并输出解个数。VC6.0编译通过。
学习C语言最好的一本书