C语言动态内存的分配实例详解
什么是动态内存分配
C语言中的内存分为两种:静态内存和动态内存。
静态内存是在程序编写的时候,由编译器在编译时分配的一块内存空间,也就是常说的栈和全局变量。静态内存在程序生命周期内都是存在的,由系统负责内存的分配和管理。
而动态内存分配,则是在程序执行过程中,需要临时分配一块内存空间,用于存储数据,这种分配方式就是动态内存分配。
动态内存的分配由程序员自行控制,不受静态内存大小的限制,能有效地提高程序的灵活性。
动态内存分配的方法
C语言中,动态内存分配主要通过 malloc()
和 free()
函数实现。
* malloc()
函数用于分配一段指定大小的内存空间并返回该分配空间的地址。
* free()
函数用于释放之前分配的内存空间。
接下来我们通过示例学习如何使用 malloc()
和 free()
进行动态内存分配和释放。
示例一:分配内存空间
分配一段 4 字节空间,用于存储一个 int 类型的变量。
#include <stdio.h>
#include <stdlib.h>
int main() {
// 分配 4 字节内存空间
int *p = (int *) malloc(4);
if(p == NULL) {
printf("空间分配失败 \n");
return -1;
}
// 依次存入 3,2,1 三个数
*p = 3;
*(p+1) = 2;
*(p+2) = 1;
printf("%d,%d,%d",*p,*(p+1),*(p+2));
// 释放内存
free(p);
return 0;
}
首先使用 malloc()
函数分配了一段 4 字节的内存空间,并将其地址赋值给指针变量 p
。接着依次将 3,2,1 三个数存储到了该内存空间中。最后,使用 free()
释放了所分配的内存空间。
示例二:重新分配内存空间
对上面的示例进行一些修改,重新分配 8 字节空间,存储 4 个 int 类型的变量。
#include <stdio.h>
#include <stdlib.h>
int main() {
// 分配 4 字节内存空间
int *p = (int *) malloc(4);
if(p == NULL) {
printf("空间分配失败 \n");
return -1;
}
// 依次存入 3,2,1 三个数
*p = 3;
*(p+1) = 2;
*(p+2) = 1;
printf("%d,%d,%d",*p,*(p+1),*(p+2));
// 重新分配 8 字节内存空间
p = (int *)realloc(p, 8);
*(p+3) = 4;
printf(",%d", *(p+3));
// 释放内存
free(p);
return 0;
}
代码中使用 realloc()
函数重新分配内存空间,并传入两个参数:原内存块地址和需要重新分配的内存块大小。重新分配后,使用指针 p
保存新分配的内存块地址,接下来向其相应的地址存储变量值。值得注意的是,重新分配内存空间前需要先释放之前分配的内存空间,不然会造成内存泄露。
综上,在 C 语言中,动态内存分配给我们提供了一种更加灵活、高效的方式来存储临时使用的数据,但也需要我们注意合理分配和释放内存,避免造成内存泄露等问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言动态内存的分配实例详解 - Python技术站