C\C++中的malloc、calloc

1、malloc

void* malloc(std::size_t size);

分配size个字节的未初始化空间,分配成功会返回分配内存的第一个地址的指针;如果失败,则返回空指针。

  • 头文件:<stdlib.h>或< cstdlib >
  • 分配未初始化的空间
  • 释放:
std::free()
std::realloc()

2、calloc

void* calloc(std::size_t num, std::size_t size);

为大小为size的num个对象分配内存,并将其初始化为0。
如果分配成功,返回一个指向第一个字节的指针。

  • 头文件:<stdlib.h>或< cstdlib >
  • 初始化 为 0;
  • 释放:
std::free()
std::realloc()

3、补充

  • malloc不会初始化,calloc会初始化
  • 在某些操作系统中,malloc返回的指针只有在程序实际使用时才得到实际内存的支持。calloc会初始化为0,在使用calloc时就会有RAM(或交换)支持分配。
  • malloc和calloc返回类型为“void *”,C编译器会隐式地将“void *”转换为需要的类型,但C++编译器不会 ,需要显示地转换。
    举例:
    xx.c
#include <stdlib.h>

int main (void) 
{
    int *arr1, *arr2;
    arr1 = malloc(3 * sizeof(int));
    arr2 = calloc(3, sizeof(int));

    arr1[0] = 0;

    free(arr1);
    free(arr2);

	return 0;
}

xx.cpp

#include <cstdlib>

int main (void) 
{
    int *arr1, *arr2, *arr3;
    arr1 = static_cast<int *> (malloc(3 * sizeof(int)));
    arr2 = (int *)(malloc(3 * sizeof(int)));

    arr3 = (int *)(calloc(3, sizeof(int)));

    free(arr1);
    free(arr2);
    free(arr3);

    return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值