2016-11-10 49 views
1

我一直在用C++進行編程一段時間,但我只是學習C. 我試圖通過下面的代碼試圖理解realloc的行爲 這是我的結構在此代碼中使用realloc - 我的數組大小不增加

struct foo{ 
int a; 
int b; 
}; 

這就是我如何使用它。最初我想創建一個大小爲2的數組(我設法做的)。然後我想將相同數組的大小增加到3,以保留其以前的內容,所以我使用realloc。這是我的代碼

//Create array of size 2 
struct foo* farry = malloc(2 * sizeof(struct foo)); 
farry[0].a =1; 
farry[1].a =2; 
for(i=0 ; i<=(sizeof(farry)/sizeof(farry[0])) ; i++) 
{ 
    printf("Value %d \n",farry[i].a); 
} 


printf("-----Increasing the size of the array \n"); 
//Increase the size 
int oldsize = sizeof(farry)/sizeof(farry[0]); 
farry = realloc(farry, (oldsize+1) * sizeof(struct foo)); 
printf("new size is %d \n",sizeof(farry)/sizeof(farry[0])); 
farry[2].a =3; 
for(i=0 ; i<=(sizeof(farry)/sizeof(farry[0])) ; i++) 
{ 
    printf("Value %d \n",farry[i].a); 
} 

這是輸出,我得到

Value 1 
Value 2 
-----Increasing the size of the array 
new size is 1 
Value 1 
Value 2 

我期待新的大小爲3和打印1,2,3,但它的新尺寸爲1這是爲什麼?舊尺寸和新的大小都在上面case.I同樣將不勝感激,如果有人能說明什麼我可能會丟失或做錯了

回答

0
struct foo* farry = malloc(2 * sizeof(struct foo)); 
... 
int oldsize = sizeof(farry)/sizeof(farry[0]); 

sizeof(farry)/sizeof(farry[0])給你大小的指針/大小的結構,而不是元素的數量。

+0

實際上,如果我沒有弄錯,它很可能是零。你能解釋一下,它有時可以工作(當使用像:'struct foo farry []') –

+0

是的,我在這裏閱讀http://stackoverflow.com/questions/15929869/count-the-number-of-elements-in -an-array-in-c,如果它的指針不可能得到數組中的元素。我不確定C程序員如何處理這種情況?我的意思是在strcuture的情況下,如何創建2個項目的數組?是'malloc(2 * sizeof(struct foo)); 「甚至正確? –

+0

@JamesFranco你會希望將'farry'中'struct foo'的數量保存在一個單獨的變量(或單獨的'struct')中,或者使用像鏈表這樣的數據結構。是的,這是正確的,儘管約定是使用'sizeof(* farry)'來代替,所以如果'farry'的類型改變了,你的代碼就會減少。 – yano