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同樣將不勝感激,如果有人能說明什麼我可能會丟失或做錯了
實際上,如果我沒有弄錯,它很可能是零。你能解釋一下,它有時可以工作(當使用像:'struct foo farry []') –
是的,我在這裏閱讀http://stackoverflow.com/questions/15929869/count-the-number-of-elements-in -an-array-in-c,如果它的指針不可能得到數組中的元素。我不確定C程序員如何處理這種情況?我的意思是在strcuture的情況下,如何創建2個項目的數組?是'malloc(2 * sizeof(struct foo)); 「甚至正確? –
@JamesFranco你會希望將'farry'中'struct foo'的數量保存在一個單獨的變量(或單獨的'struct')中,或者使用像鏈表這樣的數據結構。是的,這是正確的,儘管約定是使用'sizeof(* farry)'來代替,所以如果'farry'的類型改變了,你的代碼就會減少。 – yano