Search code examples
carrayspointersallocation

Is it possible to allocate array inside function and return it using reference?


I've tried using a tripple pointer, but it keeps failing. Code:

#include <stdlib.h>
#include <stdio.h>

int set(int *** list) {
  int count, i;
  printf("Enter number:\n");
  scanf("%d", &count);
  (*list) = (int **) malloc ( sizeof (int) * count);

  for ( i = 0; i<count;i++ ) {
    (**list)[count] = 123;
  }
  return count;
}

int main ( int argc, char ** argv )
{
  int ** list;
  int count;

  count = set(&list);

  return 0;
}

Thanks for any advice


Solution

  • What you call list is actually an array. You might do it the following way:

    #include <stdlib.h>
    #include <stdio.h>
    
    ssize_t set(int ** ppList) 
    {
      ssize_t count = -1;
    
      printf("Enter number:\n");
      scanf("%zd", &count);
    
      if (0 <= count)
      {
        (*ppList) = malloc(count * sizeof **ppList);
    
        if (*ppList)
        {
          size_t i = 0;
          for (; i < count; ++i)
          {
            (*ppList)[i] = 42;
          }
        }
        else
        {
          count = -1;
        }
      }
    
      return count;
    }
    
    int main (void)
    {
      int * pList = NULL;
      size_t count = 0;
    
      {
        ssize_t result = set(&pList);
    
        if (0 > result)
        {
          perror("set() failed");
        }
        else
        {
          count = result;
        }
      }
    
      if (count)
      {
        /* use pList */
      }
    
      ...
    
      free(pList);
    
      return 0;
    }