简单介绍动态内存分配函数malloc(),calloc()以及realloc()

介绍

C语言中的calloc、malloc和realloc函数都是用于动态分配内存的函数。

calloc函数用于一次性分配指定数量和大小的内存块,并将其初始化为零。它的原型为:

void *calloc(size_t nmemb, size_t size);

其中,nmemb表示需要分配的元素个数,size表示每个元素的大小。

malloc函数也用于动态分配内存,但不需要对分配的内存进行初始化。它的原型为:

void *malloc(size_t size);

其中,size表示需要分配的内存大小。

realloc函数则可以重新调整已经分配的内存大小。它的原型为:

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

其中,ptr是之前分配的内存地址,size表示新的内存大小。


区别

alloc/malloc/realloc有什么不同?

  • realloc(NULL,size)等价于malloc(size)
  • calloc(num,size)基本上等于void *p=malloc(num* size);memset(p,0,num*size);

需要注意的是,如果使用了calloc函数分配内存,则不能再使用malloc函数对其进行修改;同样地,如果使用了malloc函数分配内存,则不能再使用calloc函数对其进行修改。此外,如果使用了realloc函数重新调整内存大小,则需要确保新旧内存地址之间的连续性,否则可能会导致程序崩溃或者出现未定义的行为。

code 

最后附上代码案例:

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

#define N 10

int main() {
	int* p,* q,*r;
	int i; 
	if (!(p = (int*)malloc(N * sizeof(int))))
	{
		return -1;
	}
	for (i = 0; i < N; i++) {
		p[i] = 2 + i;
		printf("%d ", p[i]);//2 3 4 5 ...11,否则输出随机数
	}
	puts("");
	if(!(q = (int*)calloc(N,sizeof(int))))
	{
		return -1;
	}
	for (i = 0; i < N; i++) {
		
		printf("%d ", q[i]);//初始化0
	}
	puts("");
	 
	if (!(r = (int*)realloc(p, 2*N*sizeof(int))))
	{
		return -1;
	}
	for (i = 0; i < 2*N; i++) {
		printf("%d ", r[i]);
	}
	puts("");

	free(p);//释放分配的内存,防止内存泄漏
	p = NULL;
	free(q);
	q = NULL;
	free(r);
	r = NULL;

	return 0;
}

运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值