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

后端 未结 3 1220
离开以前
离开以前 2020-12-02 01:14

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

#include 
#include 

int set(int *** list) {
  int count, i;
         


        
相关标签:
3条回答
  • 2020-12-02 01:18

    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;
    }
    
    0 讨论(0)
  • 2020-12-02 01:36

    you have an array of integer arrays. Let's look at your set function closely:

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

    As you can see you are treating every array object like an integer value. That should be a nested loop:

    for (i to n)
        // allocate each array
        for (k to m)
            // assign value for each value of array
    
    0 讨论(0)
  • 2020-12-02 01:37

    As far as I understand your question you want to return an array which is allocated in another function : here is the simple version of this

    #include<stdio.h>
    #include<stdlib.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[i] = 123;
      }
    
      return list;
    }
    
    int main ( int argc, char ** argv )
    {
      int *list;
      list = set(list);
      //Use whatever you want to do with that array 
      free(list); // don't forget to free
      return 0;
    }
    
    0 讨论(0)
提交回复
热议问题