动态内存管理由
构成 , 这里的内存指的是 堆内存 , 与之相对的是 栈内存 ;
在 程序运行时 过程中 , 经常 根据需要 进行动态内存管理 , 从而更加灵活地管理内存资源 , 包括 :
C 语言 和 C++ 语言 中 , 都有 动态 分配 / 释放 堆内存 的方法 ;
在 C 语言中 , 使用malloc()、calloc()、realloc() 等标准库函数来动态地申请内存 :
调用上述函数前 , 需要导入 stdlib.h 头文件 ;
#include
在 C 语言中 , 调用 free() 标准库函数 释放已申请的内存 ;
在下面的代码中 ,
首先 , 使用 malloc() 函数 动态地申请了 可以存放 5 个 int 数据的 堆内存 ,
// 函数原型 :
void *malloc(unsigned int size);
然后 , 将 malloc 函数返回的 void * 类型的指针转为 int * 类型的指针 ;
// 函数原型 :
// void *malloc(unsigned int size);
// 申请内存
int* array = (int*)malloc(5 * sizeof(int));
再后 , 使用数组下标的方式访问内存 , 为内存赋值 ;
// 为内存赋值
// 赋值时使用数组下标的方式访问内存
for (int i = 0; i < 5; i++) {
array[i] = i;
}
再后 , 打印内存数据 , 获取内存空间值时使用指针形式访问内存 ;
// 打印内存
// 获取内存空间值时使用指针形式访问内存
for (int i = 0; i < 5; i++) {
printf("%d ", *(array + i));
}
最后 , 调用 free 函数释放这块内存 ;
// 释放内存
free(array);
代码示例 :
#include
#include
int main() {
// 申请内存
int* array = (int*)malloc(5 * sizeof(int));
if (array == NULL) {
printf("内存分配失败\n");
return -1;
}
// 为内存赋值
// 赋值时使用数组下标的方式访问内存
for (int i = 0; i < 5; i++) {
array[i] = i;
}
// 打印内存
// 获取内存空间值时使用指针形式访问内存
for (int i = 0; i < 5; i++) {
printf("%d ", *(array + i));
}
printf("\n");
// 释放内存
free(array);
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
0 1 2 3 4
请按任意键继续. . .