本文为个人学习笔记,仅用于个人学习、复习!
在进行c语言编程的时候,如果我们要存贮多个数据,一般的做法是申请一个相应类型的数组,但是这个方法只有在我们预先知道数组的大小的时候才可用,如果我们面临的问题需要我们根据相应的参数去修改申请的空间,那采用数组这种方法就显得有些捉襟见肘了。这事我们就需要学习一下c语言的动态内存管理了。
c语言为内存的分配和管理提供了几个函数,如下:
1、要熟知几个函数的返回值类型,以及参数
void *calloc(int num,int size);
//在内存中动态地分配num个长度为size的连续空间,并将每一个自己都初始化为0,所以它的结果是分配了num*size个字节长度的内存空间,并且每一个字节的值///都是0
void free(void *address);
//释放address所指向的内存块,释放的是动态分配的内存空间。
void *malloc(int num);
//在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。
void *relloc(void *address,int newsize);
//将address指向的内存扩展到newsize
2、申请的内存在使用完毕后要记得free()掉。
需要特别注意一下这几个函数的返回值类型。除free()函数外,另外三个函数的返回值类型均为void *,我们在使用的时候,要进行强制类型转换。当程序返回的时候,操作系统会回收分配给程序的内存,但是,还是建议当使用动态申请内存的时候,如果不在需要内存了,应调用free()函数来释放内存。
eg:
#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 is a DPS student in class 10th");
}
printf("Name=%s\n",name);
printf("Decription:%s\n",description);
free(description);
return 0;
}