代码之家  ›  专栏  ›  技术社区  ›  Kevin Meredith

C-calloc()v。malloc()[重复]

  •  31
  • Kevin Meredith  · 技术社区  · 14 年前


    c difference between malloc and calloc

    请解释一下这句话的意义,

    另一个 malloc()和 calloc()函数是内存 由malloc()函数分配 包含垃圾值,而内存 包含所有零。

    来源( “C”编程

    谢谢

    4 回复  |  直到 7 年前
        1
  •  41
  •   Cascabel    14 年前

    http://wiki.answers.com/Q/Is_it_better_to_use_malloc_or_calloc_to_allocate_memory

    malloc() calloc() 初始化分配的内存以包含所有零。由于您通常希望自己使用和初始化内存,因此 calloc() 可能没有必要。

        2
  •  25
  •   dcp    14 年前

    calloc 正在初始化内存,但是 malloc 没有。

    参考 this

    函数的作用是 nelem数组的未使用空间 初始化为所有位0。

    马洛克

    char* buffer = (char*)malloc(100);
    memset(buffer,0,100);
    

    省得你多走一步。 初始化内存的意义在于,将变量转换为已知状态,而不是未知状态。因此,如果您正在检查一个变量(比如数组元素)的期望值,那么通过提前对该变量进行预初始化,可以确保您检查的值不是垃圾。 换句话说,您可以区分垃圾值和合法值。

    例如,如果您只是在变量中留下垃圾,并且您正在检查某个值,比如42,那么您无法知道该值是否真的被您的程序设置为42,或者是否只是一些垃圾,因为您没有初始化它。

        3
  •  9
  •   plaes    8 年前

    calloc(...) 基本上是 malloc + memset (如果要0初始化内存)

    ptr = malloc(sizeof(struct fubar));
    memset(ptr, 0, sizeof (struct fubar)); //here we could use some different value instead of 0 whereas calloc always 0 initialises.
    

    当你使用 马洛克 为了分配一些内存,它以前的内容没有被清除(即没有初始化)。您可能会得到在机器启动时设置的随机值,或者您可能会看到一些属于以前运行的程序的内存,但是在分配和程序退出后,这些内存没有被清除。

    calloc 本身比 因为您必须花一些时间来清除分配内存的内容。所以,如果你只需要分配一些内存,然后复制一些东西,你可以自由使用 马洛克 .

        4
  •  4
  •   Shawn D.    14 年前

    这只意味着,如果您使用calloc()分配内存,那么您分配的任何内存都是0。i、 如果你为一个整数数组分配了空间,它们都会被设置为0,而malloc()则不会以任何方式初始化内存。