gpt4 book ai didi

c - 在链接链内动态分配和添加结构

转载 作者:行者123 更新时间:2023-11-30 15:35:50 26 4
gpt4 key购买 nike

我面临着一个关于结构动态分配的问题,更具体地说,是一个包含指向结构的指针的链接链。

链接链代码:

typedef struct Queue Queue;
struct Queue{
Real* elmt;
Queue* next;
Queue* prev;
};

所以,这个结构体是循环的,next 指向下一个

struct Real 的代码(代表):

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 结构的指针,该结构包含一个指针(即结构 Real 的成员 nb)指向位于大小等于 arg->size 的 int 数组(动态分配)中

这有效,我用一个函数测试了它:

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()添加)是显示,并没有发生任何异常情况,一切似乎都运行良好。

预先感谢您的帮助

最佳答案

printQueue 中的 if 语句将始终只打印队列中最后添加的项目。

尝试这样的事情:

void printQueue(Queue* arg){
Queue* cur=arg;

do {
printReal(cur->elmt);
printf(" ");

cur=cur->next;
} while (cur != arg);
}

关于c - 在链接链内动态分配和添加结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22790127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com