C语言杂谈——动态分配内存

简介:

所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。

动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。

动态内存分配较静态内存分配有以下两个特点:

1)不需要预先分配存储空间;

2)分配的空间可以根据程序的需要扩大或缩小。


在C语言中,提供了malloc()和calloc()函数来动态地取得内存空间。

(一)malloc()和free()函数

malloc()和free()是最常用的动态内存分配函数。如果在执行时需要空间来存储数据,则适合使用malloc()函数,用完则用free()释放该内存空间。

malloc()的格式为:

指针 = malloc(空间大小);

例如:pstr = malloc(100);

这个指令要求计算机分配100Bytes空间。malloc()函数会返回该空间的地址,且存入pstr内,于是pstr指向该空间。

malloc()定义于malloc.h头文件中。

free()函数归还于malloc()所申请的空间。其格式为:

free(指针);

例如:free(pstr);

当malloc()要求空间时,万一计算机无法提供足够的空间,就返回NULL指针。所以,如果pstr等于NULL,就表示内存空间不足,无法满足malloc()的要求。编写程序时,应养成“检查malloc()返回指针值是否为NULL”的好习惯。

(二)calloc()和realloc()函数

calloc()函数的格式为:

指针 = calloc(n,size);

n:共有n个数据;

size:每项需要size个bytes的空间。

realloc()函数能扩大或缩小已取得的内存空间。格式如下:

指针 = realloc(原先的指针,现需空间的大小);

请注意,计算机可能会另外找一块足够大的空间来取代原先分配的空间。因此,新返回的指针值可能与原先的指针值不同。

作者: 韩兆新
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类:  [03]C语言杂谈
标签:  C语言杂谈

本文转自韩兆新博客博客园博客,原文链接:http://www.cnblogs.com/hanzhaoxin/archive/2012/11/21/2781346.html,如需转载请自行联系原作者
目录
相关文章
|
9天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
18 0
|
20天前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
23 0
|
20天前
|
编译器 C语言 C++
【C语言】memcpy()函数(内存块拷贝函数)
【C语言】memcpy()函数(内存块拷贝函数)
38 0
|
29天前
|
存储 C语言
c语言中动态内存分配
c语言中动态内存分配
10 0
|
11天前
|
存储 编译器 C语言
深入探索C语言动态内存分配:释放你的程序潜力
深入探索C语言动态内存分配:释放你的程序潜力
26 0
|
20天前
|
编译器 C语言 C++
【C语言】calloc()函数详解(动态内存开辟函数)
【C语言】calloc()函数详解(动态内存开辟函数)
24 0
|
20天前
|
存储 编译器 程序员
【C语言】内存的动态分配与释放
【C语言】内存的动态分配与释放
27 0
|
20天前
|
存储 前端开发 编译器
【C语言】memmove()函数(拷贝重叠内存块函数详解)
【C语言】memmove()函数(拷贝重叠内存块函数详解)
32 1
|
21天前
|
存储 编译器 程序员
【C语言】整形数据和浮点型数据在内存中的存储
【C语言】整形数据和浮点型数据在内存中的存储
12 0
|
29天前
|
存储 安全 程序员
C语言内存管理
C语言内存管理
14 0