Do I have to call memset after I allocated new memory using malloc

后端 未结 4 1998
情书的邮戳
情书的邮戳 2020-12-16 18:02
#include \"stdlib.h\"
#include \"stdio.h\"
#include \"string.h\"
int main(int argc, char* argv[])
{
    int *test = malloc(15 * sizeof(int));
    for(int i = 0;i <         


        
相关标签:
4条回答
  • 2020-12-16 18:19

    malloc does not initialize the memory it allocates. You just get whatever random garbage was already in there. If you really need everything set to 0, use calloc at a performance penalty. (If you need to initialize to something other than 0, use memset for byte arrays and otherwise manually loop over the array to initialize it.)

    0 讨论(0)
  • 2020-12-16 18:25

    For performance reasons, malloc() makes no guarantee regarding the contents of newly allocated memory. It might be zeros, it might be random data, it might be anything. If you want malloc'ed memory to have a specific value, then it is up to you do it.

    0 讨论(0)
  • 2020-12-16 18:37

    C11 7.22.3.4

    void *malloc(size_t size);
    

    The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate.

    If you want the values to be set to zero, use calloc instead. calloc is basically just a wrapper function around one call to malloc and one call to memset (with value to set is 0).

    0 讨论(0)
  • 2020-12-16 18:37

    When you request for a memory from heap, heap will just allocate any block of memory available to it. This block of memory may have some data depending upon a previous write.

    0 讨论(0)
提交回复
热议问题