C语言内存管理--动态内存分配

一、介绍
一般定义数组是要给固定的长度,当我们不知道输入的长度是多少的时候,怎么办
例如:需求现在有一个电话本存储,电话本中联系人并不知道有多少,一次定义1000个长度会占用内存,定义太小又会导致存储不够

c语音给了一种特殊的方式,动态内存分配

二、函数介绍
头文件
#include <stdio.h>

1、void *malloc(int num);
在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的
2、void calloc(int num, int size);
在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num
size 个字节长度的内存空间,并且每个字节的值都是0
3、void *realloc(void *address, int newsize);
该函数重新分配内存,把内存扩展到 newsize
4、void free(void *address);
该函数释放 address 所指向的内存块,释放的是动态分配的内存空间

三、使用说明
动态分配内存,内存的来源是ram,准确说是ram中的堆内存,硬件上外拓sdram或者ddr的平台,软件上一般是上操作系统的平台
使用步骤:
1、动态分配内存
2、指针映射内存
3、使用
4、释放

注意:用完一定要释放内存,不然会造成内存泄漏

四、示例
1、函数使用

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
   char name[100];
   char *description;
 
   strcpy(name, "Zara Ali");
 
   /* 动态分配内存 */
   description = (char *)malloc( 200 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student in class 10th");
   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
}

2、工程实例
以电话本为例
常规数组操作

typdef struct {
	char name[20];
	char tel_num[11];
}tel_def;


tel_def Contact[1000] = {0};

动态内存分配操作

typdef struct {
	char name[20];
	char tel_num[11];
}tel_def;


tel_def *Contact[1000] = {0};

//使用的时候
Contact[0] = (tel_def *)malloc(sizeof(tel_def ));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值