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
Post a Comment