在struct中重新分配数组

时间:2014-04-16 09:10:58

标签: c arrays allocation realloc

typedef struct {
    int count;
    int *items;
}set;

set* set_alloc(set *src, int num);
int set_insert(set *s, int num);

int main() {
    set *A = NULL;
    A = set_alloc(A, 0);
    A = set_alloc(A, 1); //this and line below is part of inserting function
    A->items[0] = 2;
    system("pause");
}   

set* set_alloc(set *src, int num) {
    if (src == NULL && num == 0) {
            set *src = (set*)malloc(sizeof(set));
        src->count = 0;
        src->items = NULL;
    }
    else {
        src->count = num;
        src->items = (int*)realloc(src->items, num*sizeof(int));
    }
    return src;
}

上面的代码能够为集合内部的项目数组和集合本身分配内存,但是,它无法重新分配该项目数组。我可以将其设置为常量,但我不能我真的想解决这个问题,因为我以前的项目都有这个问题。

2 个答案:

答案 0 :(得分:3)

下面:

set *src = (set*)malloc(sizeof(set));

您要重新声明src(在块范围内),您想要:

src = malloc(sizeof(set));
  

我可以将它设置为一个恒定的大小,但我真的不想四处走动   这个问题,因为我在以前的项目中已经有了它。

当您事先不知道尺寸时,realloc的替代方案是链接列表。

答案 1 :(得分:2)

你的函数永远不会返回新分配的" * src"从函数set_alloc,请参阅下面的评论,请使用相同的* src进行分配,您的代码应该有效。

    set* set_alloc(set *src, int num) {
    if (src == NULL && num == 0) {
        set *src = (set*)malloc(sizeof(set));  ***//<--- This pointer is local to if block.***
 *//Please Correct code as =>*            src = (set*)malloc(sizeof(set));

        src->count = 0;
        src->items = NULL;
    }
    else {
        src->count = num;
        src->items = (int*)realloc(src->items, num*sizeof(int));
    }
    return src;   ***// <-- This is returning the in parameter not the malloced pointer ***
}