栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言学习必经之路-动态内存管理

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言学习必经之路-动态内存管理

文章目录

关于动态内存管理的函数

malloccallocreallocfree

关于动态内存管理的函数

申请空间:malloc calloc realloc
释放空间:free
原则:谁申请谁释放,防止产生内存泄露。

malloc

void *malloc(size_t size)

功能:在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是分配区域的起始地址。

示例:

#include 
#include 
int main()
{
	int *p=NULL;
	p=malloc(sizeof(int));
	if(p==NULL)
	{
		printf("malloc() error!n");
		exit(1);
	}
	*p=10;
	printf("%dn",*p);
	free(p);

	exit(0);
}

动态数组实现

#include 
#include 
int main()
{
	int num=5,i;
	int *p;
	p=malloc(sizeof(int)*num);
	for(i=0;i 
calloc 

void* calloc(size_t num,size_t size);

功能:在内存的动态存储区中分配num个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。

示例
从这个例子可以看出calloc分配完存储空间后将元素初始化。输出十个0.

#include
#include
int main()
{
    int i;
    int* p = calloc(10, sizeof(int));
    for(i = 0;i < 10;i++)
        printf("%d", p[i]);
    printf("n");
    free(p);
    exit(0);
}
realloc

void *realloc(void *ptr, size_t size);

功能
先判断当前的指针是否有足够的连续空间,如果有,扩大ptr指向的地址,并且将ptr返回,如果空间不够,先按照size指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来ptr所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。

示例

#include
#include
int main()
{
	int i;
	int *p=malloc(5*sizeof(int));
	if (!p)
	{
  	 	printf("malloc failn");
   		exit(-1);
	}
	printf("malloc%pn",p);
	for(i=0;i<5;i++)
		p[i]=i;
	p=(int*)realloc(p,10*sizeof(int));
	if (!p) 
	{
  	 	printf("realloc failn");
  		exit(-1);
	}
	printf("realloc%pn",p);
	for(i=5;i<10;i++)
		p[i]=i;
	for(i=0;i<10;i++)
		printf("%3d",p[i]);
	free(p);
	p = NULL;
	return 0;
}
free

void free(void *ptr)

功能:释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/743404.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号