C语言几个申请地址空间的函数

1、void * malloc(unsigned int size)

malloc为动态内存分配,申请一块连续指定大小的内存块区域以void*类型返回分配的内存区域地址;

  1. 函数头文件:#include<stdlib.h>
  2. 申请得到的为连续的存储空间,如果分配失败,则返回一个空指针(NULL)
  3. 返回的指针类型:void*(未确定类型的指针),也为空间首地址
  4. 函数参数为指定的字节数
  5. 最后用free()函数释放内存(free释放内存问题)
  6. malloc(0)属于合法语句,它能返回一个合法的指针(有一说法是,当malloc分配内存时它除了分配我们指定SIZE的内存块,还会分配额外的内存来存储我们的内存块信息,用于维护该内存块)
#include<stdio.h>
#include<stdlib.h>

void main()
{
	char *p;
	p = (char*)malloc(100*sizeof(char));    //sizeof获取字节数
	if(p==NULL)exit(-1);                    //如果分配空间失败,0为正常退出,其他为非正常退出
	printf("输入一串字符:");
	scanf("%s",p);
	printf("\n输出:%s\n",p);
	free(p);
	p = NULL;
}

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

指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小),首先判断ptr指向的区域是否有足够的空间,如果有,则增大(或减少)该内存区域,然后将ptr返回;如果ptr指向的区域没有足够的空间,则分配一段新的内存区域,并且将原ptr的数据拷贝到新的内存区域,释放ptr指向的内存区域(内部完成,不需要外部使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址

  1. 函数头文件:#include<stdlib.h>
  2. 改变的区域可以比旧内存区域大或小
  3. 如果分配失败,则返回空指针NULL,原来的指针仍然有效(此时ptr所指的旧内存区域并没有被释放,需要用free函数释放这一部分内存,因此不能直接赋值给ptr,这样将导致ptr指针变为空指针,使旧内存区域无法得到释放 )
char* Dilatation(char* p,int n)
{
	char* q;
	q = (char*)realloc(p,n*sizeof(char));
	if(!q)
	{
		free(p);                            //如果返回为空指针,则释放原来的旧地址内存
	}
	return q;
}

3、void* calloc(unsigned int num,unsigned int size)

在内存的动态存储区中分配num个长度为size的连续空间;
注意:num:对象个数,size:对象占据的内存字节数,相较于malloc函数,calloc函数会自动将内存初始化为0

#include<stdio.h>
#include<stdlib.h>

 
int main()
{
    char*str = NULL;
    str = (char*)calloc(10,sizeof(char));
    printf("String is %s\n",str);
	free(str);
    return 0;
}
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值