0
我面臨着一個關於動態分配結構的問題,一個鏈接鏈包含一個指向結構的指針更具體。動態分配和添加一個鏈接鏈內的結構
代碼鏈接的鏈:
typedef struct Queue Queue;
struct Queue{
Real* elmt;
Queue* next;
Queue* prev;
};
所以,這個結構是圓形的,具有下一個指向下一
結構實的代碼(其表示):
typedef struct Real Real;
struct Real{
int* nb; //int array containing the number
size_t size;
int neg; /*0=positive 1=negative*/
int com; /*-1 = no comma, otherwise integer indicating the position*/
};
所以,正如所解釋的,我希望動態地分配一個包含多個元素的隊列,所以我創建了這個函數:
Queue* mallocQueueElmt(const Real* arg){
Queue* res=NULL;
res=mallocQueue();
res->elmt=NULL;
res->elmt=mallocReal(arg->size);
memmove(res->elmt->nb, arg->nb, sizeof(int)*arg->size);
res->elmt->com=arg->com;
res->elmt->neg=arg->neg;
res->next=res;
res->prev=res;
return res;
}
mallocReal()
只返回在含有一個指針一個真正的結構指向的指針(意味着構件的結構Real
的nb
)在int數組(動態分配)的尺寸等於arg->size
該作品指向我用一個函數測試它:
void printQueue(Queue* arg){
Queue* cur=NULL;
cur=arg->prev;
if(cur == arg->prev){;
printReal(cur->elmt);
printf(" ");
}
else
while(cur != arg){
cur=cur->next;
if(cur->elmt){
printReal(cur->elmt);
printf(" ");
}else{
printf("no element ");
}
}
}
但是當我嘗試添加的元素,由於這項功能:
Queue* addElement(Queue* arg, const Real* arg1){
Queue* res=NULL;
res=mallocQueue();
res->elmt=NULL;
res->elmt=mallocReal(arg1->size);
memmove(res->elmt->nb, arg1->nb, sizeof(int)*arg1->size);
res->elmt->neg=arg1->neg;
res->elmt->com=arg1->com;
res->prev=arg->prev;
res->next=arg;
res->prev->next=res;
arg->prev=res;
res=arg;
return res;
}
和召回printQueue()
,那麼只顯示第二個元素(因此添加了addElement()
)爲 ,並且沒有任何異常發生,一切似乎都運行良好。
預先感謝您的幫助