realloc函数和malloc函数解析

realloc函数和malloc函数都是用来动态分配内存的函数,但是它们有一些区别。

1.使用方法

malloc函数用于分配指定字节数的内存空间,并返回指向这段内存的指针。其函数原型为:

void *malloc(size_t size);

其中,size是要分配的内存空间的字节数。malloc函数返回的指针类型为void*,需要根据需要进行类型转换。如果内存分配失败,则返回NULL。

例如,1.下面的代码使用malloc函数分配了一个包括10个整数的数组:

int *ptr = malloc(10 * sizeof(int));
if (ptr != NULL) {
    // 内存分配成功,可以使用指针ptr访问这段内存
} else {
    // 内存分配失败
}

2.

QNode* newnode = (QNode*)malloc(sizeof(QNode));
  1. QNode* newnode: 声明了一个名为newnode的指针变量,该指针指向QNode类型的数据。
  2. malloc(sizeof(QNode)): 调用malloc函数分配了一块大小为QNode类型的内存空间。sizeof(QNode)用来获取QNode类型的数据占用的字节数。
  3. (QNode*): 强制将malloc函数返回的指针转换为QNode类型的指针。
  4. 最终将动态分配的内存地址赋值给newnode指针变量。

realloc函数用于重新分配已经分配的内存空间的大小。其函数原型为:

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

其中,ptr是之前由malloc或realloc返回的指针,size是要重新分配的内存空间的字节数。realloc函数会按照指定的大小重新分配内存,并返回指向新分配内存的指针。如果内存分配失败,则返回NULL。

例如,下面的代码使用realloc函数将之前分配的内存空间扩大为20个整数:

 

需要注意的是,使用realloc函数重新分配内存时,原来的指针ptr可能会变化,所以需要将返回的新指针重新赋值给原来的指针变量。

TDataType* temp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newcapacity);
  1. STDataType* temp: 声明了一个名为temp的指针变量,该指针指向STDataType类型的数据。
  2. realloc(ps->a, sizeof(STDataType) * newcapacity): 调用realloc函数重新分配了内存空间给指针变量ps->a。realloc函数接受两个参数,第一个参数是待重新分配内存的指针,第二个参数是重新分配后的内存大小。这里使用了sizeof(STDataType) * newcapacity来计算重新分配的内存大小,即每个STDataType类型的数据占用的字节数乘以newcapacity。
  3. (STDataType*): 强制将realloc函数返回的指针转换为STDataType类型的指针。
  4. 最终将重新分配后的内存地址赋值给temp指针变量。
 


2.功能不同:

malloc函数用于分配指定大小的内存块,并返回指向该内存块的指针。
realloc函数用于重新分配已分配内存的大小。
它接受一个已分配内存的指针和新的大小作为参数,并返回重新分配后的内存块的指针。如果新的大小大于原内存块的大小,则额外的内存空间将被分配,并且原内存块中的数据将被复制到新的内存块中;如果新的大小小于原内存块的大小,则原内存块中的数据可能会被截断或丢失。

3.参数不同:

malloc函数只接受一个参数,即要分配的内存块的大小。
realloc函数接受两个参数,第一个参数是已分配内存的指针,第二个参数是新的内存块的大小。

4.返回值不同:

malloc函数返回一个指向分配内存块的指针,如果分配失败,则返回NULL。
realloc函数返回一个指向重新分配内存块的指针,如果分配失败,则返回NULL。如果分配成功,该指针可能与原内存块的指针相同或不同。

5.用途不同:

malloc函数通常用于分配初始大小的内存块,比如数组、结构体等。
realloc函数通常用于在运行时根据需要调整内存块的大小,比如动态数组、字符串的扩展等。

总结起来,malloc函数用于分配指定大小的内存块,而realloc函数用于重新分配已分配内存的大小。
 

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
realloc和mallocC语言中用于动态内存分配的函数malloc函数用于分配指定大小的内存块,并返回指向该内存块的指针。它的原型如下: ```c void *malloc(size_t size); ``` 其中,size参数表示要分配的内存块的字节数。malloc函数会在堆上分配相应大小的内存空间,并返回指向该内存块的指针。如果分配失败,则返回NULL。 realloc函数用于重新分配已经分配的内存块的大小。它的原型如下: ```c void *realloc(void *ptr, size_t size); ``` 其中,ptr参数是一个指向先前由malloc、callocrealloc返回的指针,或者是NULL指针。size参数表示要重新分配的内存块的新大小。realloc函数会尝试将原来分配的内存块扩大或缩小到新的大小,并返回指向重新分配后的内存块的指针。如果重新分配失败,则返回NULL,并且原来分配的内存块仍然有效。 需要注意的是,realloc函数可能会将原来分配的内存块复制到新的位置。如果新的大小大于原来分配的大小,那么它会在新位置上创建一个新的内存块,并将原来的数据复制到新位置。如果新的大小小于原来分配的大小,那么它会将原来内存块中前面部分的数据复制到新位置,并丢弃剩余的数据。 在使用realloc函数,需要注意以下几点: - 如果ptr是NULL指针,则realloc的行为类似于malloc,会分配新的内存块。 - 如果size为0,则realloc的行为类似于free,会释放ptr指向的内存块。 - 如果realloc失败,会返回NULL,并且原来分配的内存块仍然有效。因此,在使用realloc函数后,应该检查返回值是否为NULL,并根据需要处理错误情况。 总结来说,mallocrealloc都是用于动态内存分配的函数,malloc用于分配内存realloc用于重新分配内存。它们在使用需要注意参数的正确性和返回值的处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李很执着

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值