2012-02-01 53 views
0

這是我必須在結構中動態聲明數組的代碼。我動態地分配一個名爲'容量'的大小的數組列表。在我的程序的後期,我想增加數組的大小並重新分配它。我該如何解決它?如何在C中重新分配一個數組中的數組的大小?

struct mystruct { 
int x; 
struct y **list; 
}; 

包裝函數聲明數組目前的結構

struct mystruct *mystruct_init() 
{ 
    struct mystruct *mystruct = calloc(1, sizeof(*mystruct)); 

    // loop through and allocate memory for each element in list 
    mystruct->list = calloc(1, sizeof(struct y *) * mystruct->list_length); 

    for (int i = 0; i < capacity; i++) 
     mystruct->list[i] = calloc(1, sizeof(struct y)); 

    return mystruct; 
} 

內調用包裝函數

struct mystruct *h1 = mystruct_init(); 

我的問題是,我該如何使用realloc函數來增加大小清單(容量值的兩倍)?如果有人能幫助我,那將是非常好的。

+1

http://linux.die.net/man/3/realloc – 2012-02-01 21:13:22

+0

@SethCarnegie您編輯殺了一個需要支架。 – Till 2012-02-01 21:13:57

+0

@Till哎呀,固定,縮進,你知道 – 2012-02-01 21:16:18

回答

1

假設你有int oldsize

struct y **newlist=realloc(h1->list,oldsize*2*sizeof(struct y*)); 
if (!newlist) return -1;//error 
h1->list=newlist; 
int i; 
for (i=oldsize;i<2*oldsize;i++) h1->list[i]=calloc(1,sizeof(struct y)); 
+0

h1-> list [1] - > h1-> list [i] – Zuljin 2012-02-01 21:18:42

+0

糟糕!謝謝... – asaelr 2012-02-01 21:27:37

+0

@asaeir:我得到這個錯誤在重新分配行** glibc檢測*** ./compareDocs:realloc():無效的下一個大小:0x0000000000603030 *** .....任何想法是什麼這可能是關於? – hektor 2012-02-02 13:54:27

相關問題