浅谈malloc与 calloc、realloc、new 的区别

写此文章,主要是让初学者,能够清楚的认识malloc,calloc, realloc,与new之间的区别

相关函数原型:

 

#include <stdlib.h>

void *calloc(size_t nmemb, size_t size);

void *malloc(size_t size);

void free(void *ptr);

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

 

1. Malloc

作 用: Malloc用于动态申请存储空间,它不是关键字,而是一个申请内存的函数

用 法:

Malloc 返回一块内存地址的指针,否则会返回空指针null,这里要注意的是,当内存不再使用的时候,用free()函数进行对内存的释放。

 

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

 

int main(int argc, char **argv)

{

    char *str;

    if((str=malloc(20)) == NULL)

    {

         printf("malloc is failed./n");

         exit(1);

    }

    strcpy(str, "hello world!");

    printf("String is %s /n", str);

    free(str);

    return 0;

}


2.calloc

作 用:calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。

例 子:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int main()

{

    char *str = NULL;

    str = calloc(15, sizeof(char));

    strcpy(str, "hello world!");

    printf("String is %s /n", str);

    free(str);

    return 0;

}


3.realloc

作 用:重新分配内存空间。

例 子:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int main()

{

     char *str;

     str = malloc(10);

     strcpy(str, "hello world.");

     printf("String is %s /n. Address is %p /n", str, str);

     str = realloc(str, 20);

     printf("String is %s /n. New Address is %p /n", str, str);

     free(str);

     return 0;

}

"

4.总结:

        malloc: 动态分配size字节空间,返回它的指针。(此函数不能初始化内存空间)
        calloc:动态分配n个连续的size字节空间,返回第一个指针。它有两个参数,分别为参数的数目,和每个参数的大小,那么这两个参 数的乘积就是这个分配空间的大小。(此函数可以初始化内存空间)
        realloc:将指针指向的内存空间扩展成n个,把它放在最后解释因为偶不建议使用,确实要用也要考虑多种情况。
        free:释放上述两函数分配的空间;

        malloc与new :

             1 、new 建立的是一个对象,malloc 分配的是一块内存。
             2、malloc申请的是heap区的内存空间,返回的是指针。new 建立的对象你可以把它当成一个普通的对象,用成员函数访问,不要直接访问它的地址空间。(注意用delete释放空间)。
             3、malloc/free是C/C++中的方法(函数),new/delete是C++中的操作符。
             4、使用free之前要判断,使其free的指针是!NULL的,使用delete则无须判断。
             5、free掉的内存是该指针指向的一段内存空间,里面应该是空的。而delete掉的内存是里面确实存有数据或者对象的。

最后要注意的是malloc和free 、new和delete成对使用,以免不必要的麻烦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值