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

标签 c pointers dynamic struct allocation

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

链接链代码:

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/

相关文章:

c - 这个 __VA_ARGS__ 扩展有效 c99 吗?

java - 当我更改类时实例会发生什么?

WPF 动态 GUI 元素

html - CSS:3 或 4 列,具体取决于设备方向

c - 如何初始化结构中的字符

c - float 计算结果错误

c - C 移位表达式是否具有无符号类型?为什么 Splint 会警告右移?

c - 指向链表指针的指针

c++指向整数的指针在减去时给出不同的答案

c++ - 返回对类成员容器的元素的引用