Search code examples
cdynamic-allocation

why we use sizeof using malloc?


What is purpose of using sizeof using malloc in C? Why its necessary?

I mean we can use sizeof but we already know the size(=1000 bytes) what we are allocating in memory?

I am beginner in C so. This might be a very obvious question.


Solution

  • DataTypes And Memory Matter

    The answer is in the data types. While you know how many objects you want to allocate memory for, you may not want to go through the trouble of mentally computing their size.

    So Does Maintainability

    Also, what if the composition of these changes later? Then you're screwed and have to edit everything.

    So that's irrelevant in your example, without context. But in the case where you want to allocate memory for more complex things (say, a struct with a number of fields), it does become quite important and useful.

    Example 1 (not so important here):

    char *s = malloc(100 * sizeof(char));
    

    But hey, it's just chars, it's fine, you could have done that:

    char *s = malloc(100);
    

    Generally works. But shooting yourself in the foot, as you'll see below.

    Example 2 (matters a bit already):

    int *i = malloc(100 * sizeof(int));
    

    Sure, you could have written that:

    int *i = malloc(100 * 4);
    

    That is, assuming you develop for just one architecture you know pretty well.

    Example 3 (starting to matter quite a bit!):

    typedef struct s_listelement{
        int                  dataitem;
        struct s_listelement *link;
    }              t_listelement;
    
    t_listement *le = malloc(sizeof(t_listelement));
    

    Now imagine that linked-list item's structure contains a bunch of other fields...

    Would you want to trust sizeof(), or go have fun and do the math yourself?