我很難以非常基本的方式實現realloc。Realloc不擴展我的陣列
我想在** RET,這是指向結構 與ret = realloc(ret, newsize);
陣列擴展的內存區域,並根據我的調試字符串我知道新尺寸正確地增加在循環的過程中(從原來的大小4到8到12等),但是當我做sizeof(ptr)
它仍然返回4的原始大小,並且我試圖放置到新分配的空間中的東西無法找到(我想我已經縮小到realloc()這就是爲什麼我格式化這樣的問題)
如果問題不是立即顯現給你,我可以發佈函數的全部內容只是試圖不「欺騙」我的作業太多了(現在代碼有點亂,大量使用printf()進行調試)。
好吧,根據你的回答,我在調試我的代碼時失敗了,所以我想我會發布整個函數,這樣你可以告訴我更多關於我做錯了什麼。
(可以忽略的printf(),因爲大多數的那是被調試甚至不是工作)
Booking **bookingSelectPaid(Booking **booking) {
Booking **ret = malloc(sizeof(Booking*));
printf("Initial address of ret = %p\n", ret);
size_t i = 0;
int numOfPaid = 0;
while (booking[i] != NULL)
{
if (booking[i]->paid == 1)
{
printf("Paying customer! sizeof(Booking*) = %d\n", (int)sizeof(Booking*));
++numOfPaid;
size_t newsize = sizeof(Booking*) * (numOfPaid + 1);
printf("Newsize = %d\n", (int)newsize);
Booking **temp = realloc(NULL, (size_t)newsize);
if (temp != NULL)
printf("Expansion success! => %p sizeof(new pointer) = %d ret = %p\n", temp, (int)sizeof(temp), ret);
ret = realloc(ret, newsize);
ret[i] = booking[i];
ret[i+1] = NULL;
}
++i;
printf("Sizeof(ret) = %d numOfPaid = %d\n", (int)sizeof(ret), numOfPaid);
}
return ret; }
[EDIT2] - >http://pastebin.com/xjzUBmPg
[EDIT3]只是爲了要清楚,printf的,臨時指針和那種性質的東西都是調試的,而不是預期功能的一部分。那我百思不得其解的行是我知道肯定預訂包含在NULL結束結構的表中的一個與realloc(ret, newsize);
或ret[i] = booking[i]
基本上,我試圖把具有特定值集的那些到1(支付)到新表,這是我的主要()試圖從這個功能獲得...所以我錯了哪裏?
這裏的問題究竟是什麼? (我沒有在任何地方看到問號......) –
我想問題是:「我做錯了什麼?」 基本上,我已經分配'** ptr = malloc(sizeof(my_structure *))' 而不知道該數組中有多少個結構實例,然後基於一個循環,我正在增加一個尺寸變量,並在'ptr = realloc(ptr,newsize)'中使用它,但我無法再將更多結構放入數組中... 即使冒着失敗課程的風險,我也可以發佈整個代碼,如果我太模糊了,哈哈。 – user1478361
@ user1478361:下一次,請使用'代碼示例'代替'blockquote'(它位於編輯工具欄中)。我現在爲你修復它。 – Tim