Fail to return a multidimensional array in C -


i'm trying write function in c, returns pointer array. each element of array pointer initialized structure, , in each structure there's pointer array.

struct queuerecord; typedef struct queuerecord* queue;  queue createqueue(int maxsize){     queue newqueue = malloc(sizeof(struct queuerecord));     newqueue->array = malloc(sizeof(int)*maxsize);     newqueue->capacity=maxsize;     newqueue->front=0;     newqueue->rear=0;     return newqueue; } 

this works fine in following function:

queue* initqarr(int maxsize){     queue arr[10];     (int i=0; i<10; i++) {         arr[i]=createqueue(maxsize);     }     return arr; } 

when pass parameter 10 in , set breakpoint @ return, seems good (excuse me can't post images, debug information following):

arr(queue[10])  [0]=(queue)0x100105480    capacity=(int)10    size=(int)0    front=(int)0    rear=(int)0    array=(int*)0x1001054a0  [1]=(queue)0x1001054d0  ...  ...  [9]=(queue)0x100105760 

however!when invoke function , return new array, got array 5 elements:

queue *digitsqarr = initqarr(length); int digit = 0; 

(debug information following):

digitqarr = (queue*)0x7fff5fbff6d0     *digitsarr=(queue)0x100105480         capacity=(int)10         size=(int)0         front=(int)0         rear=(int)0         array=(int*)0x1001054a0     [1]=(queue)0x1001054d0     ...     ...     [4]=(queue)0x1001055d0 

in initqarr, return address of local variable, arr:

queue* initqarr(int maxsize){     queue arr[10];     (int i=0; i<10; i++) {         arr[i]=createqueue(maxsize);     }     return arr; } 

the returned pointer point local array arr, no longer valid once function returns. follow example of createqueue , allocate memory on heap:

queue* initqarr(int maxsize){     queue *arr = malloc(10 * sizeof(*arr));     (int i=0; i<10; i++) {         arr[i]=createqueue(maxsize);     }      return arr; } 

after returning, pointer arr still valid, because points memory on heap. should free such memory after using it, queue pointers allocated in createqueue.


Comments

Popular posts from this blog

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

python - Mongodb How to add addtional information when aggregating? -

java - Incorrect order of records in M-M relationship in hibernate -