memory allocation for array of pointers

前端 未结 4 795
梦如初夏
梦如初夏 2021-02-10 01:45

I need to allocate memory for a pointer which needs to be used as a 2d array.I know how to allocate memory for char pointers and int pointers I am confused how memory is allocat

相关标签:
4条回答
  • 2021-02-10 02:26

    Also, in short you can do the following too in this case for allocating storage for five characters

    names = (char*)malloc(5 * sizeof(char))

    0 讨论(0)
  • 2021-02-10 02:35

    What you're doing is allocating space for 5 chars. You could write this and it'll have the same result:

    char *names = (char *)malloc(sizeof(char) * 5);
    

    If you want to have an array of pointers, I think this'd be the best code

    char **names = (char **)malloc(sizeof(char *) * 5);
    

    I'm not a super-coder, but as what I now, this is the right solution.

    0 讨论(0)
  • 2021-02-10 02:40

    No, this is not because you are allocating the array assuming a dimension of just 1 element of primitive type char (which is 1 byte).

    I'm assuming you want to allocate 5 pointers to strings inside names, but just pointers.

    You should allocate it according to the size of the pointer multiplied by the number of elements:

    char **names = malloc(sizeof(char*)*5);
    

    You don't need to allocate them one by one with a loop. Note that you need to specify that it is a pointer-of-pointers by using **

    0 讨论(0)
  • 2021-02-10 02:43

    Emphisizing what Jack said in in the end: his code works only if the array is declared as a pointer-of-pointers by using **.

    When the array is declared as

    char *names[5];
    

    I guess the right way of allocating memory is almost as Ak1to did, but multiplying by the wanted size of the string of chars:

    char *names[5];
    for(i=0;i<5;i++)
    {
      names[i]=(char *)malloc(sizeof(char)*80);
    }
    

    else the compiler throws an error about incompatible types.

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