C语言--分配内存简介
C语言 -- 简介 分配内存
2023-09-27 14:29:24 时间
简介malloc()和free()
malloc()简介
C语言声明变量等都是在内存上开辟空间的,内存包括四个区域:代码区,数据区,堆区和栈区。
一般的声明都是在栈帧中开辟空间的,在windows系统中,栈区一般是1M大小,而C语言可以在程序运行时分配更多的空间,主要工具是malloc(),此函数会在堆区中申请空间。在头文件stdlib.h中。
该函数接受一个参数:所需内存的字节数,它返回动态分配内存块的首地址。这个指针指向void,相当于泛型指针,所以通常该返回值会要被强制转换为匹配的类型。
例如:
#include<stdlib.h>
int* ptr = (int*)malloc(sizeof(int));
通常malloc()和free()配对使用。
free()函数的参数是之前malloc()返回的地址,该函数释放之前malloc()分配的内存。
例如使用malloc()实现一个数组的内存分配:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
const int SIZE = 10;
int i = 0;
int* ptr = (int*)malloc(SIZE * sizeof(int));
if (ptr == nullptr) //malloc()可能分配不到所需内存
{ //在这种情况下,让函数返回空指针
printf("Memory allocation failed.\n");
exit(EXIT_FAILURE); //程序结束
}
puts("Please enter the values(q to quit):");
while (i < SIZE && scanf_s("%d", &ptr[i]) == 1) //初始化数组
++i;
for (i = 0; i < SIZE; ++i) //输出数组的元素
{
printf("%5d", ptr[i]);
}
printf("\n");
free(ptr);
ptr = nullptr;
return 0;
}
free()的重要性
如果在使用完malloc()后忘掉free(),当函数结束时,作为自动变量的指针也会消失,但是它所指向的申请的内存依然存在,指针被销毁,那这块内存也无法访问,导致不能被重复利用。
calloc()函数
和malloc()函数类似
其格式为:
int* ptr = (int*) calloc(10, sizeof(int));
相关文章
- 一起talk C栗子吧(第一百三十三回:C语言实例--创建进程时的内存细节)
- 一起talk C栗子吧(第二十二回:C语言实例--队列一)
- OC语言--内存管理
- 编程一一C语言的问题,cpu中的专用寄存器
- 程序员之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)
- C语言 -- 函数内局部数组
- C语言中指针和取地址符&的关系
- 【输出N行杨辉三角形】两种输出方式(直角三角形型和等腰三角形型)C语言
- 【华为OD机试 2023最新 】 采样过滤(C语言)
- C语言之指针练习题
- C语言实现矩阵求逆(可抵制奇异值、坏值导致的奇异解)
- C语言中关于结构体的内存对齐
- C语言基础篇--选择/顺序/循环结构
- Python源代码 -- C语言实现面向对象编程(基类&派生类&多态)
- 1072 开学寄语 (20分)C语言
- C语言--static全局使用示例
- C语言读写配置文件--转载
- 【C/C++】C语言复制字符串及复制函数汇总(strcpy()/memcpy()/strncpy()/memmove())
- 【ESP32】Platformio+Arduino+LVGL | 如何加载图片(使用C语言数组方法)
- 第一章 C语言概述
- C语言高手之路--目录