我具有以下功能:爲結構指針運算給出奇怪結果
void deleteInventory(struct book** inventory)
{
struct book* ptr = NULL;
ptr = *inventory;
while(length != 0)
{
free(ptr);
length--;
++ptr;
}
free(inventory);
}
結構:
結構的總大小:147字節(11 + 64 + 64 + 4 + 4) sizeof(結構體書)返回:148字節
我的庫存變量文件是結構的陣列,並且包含3個記錄
現在,在功能調試的結果(沒有高2個字節的地址):
inventory[0] = 0x1350
inventory[1] = 0x14e0
inventory[2] = 0x1670
差異存儲器:400個字節,行
在第一迭代一切都OK了,第一條記錄刪除沒有問題
但經過
++ptr;
PTR將包含:0x13e4
庫存[0] - PTR = 148個字節 - 根據結構的尺寸
,但它不是指下一個記錄正確區別,因爲下一個記錄的地址在內存中:0x14e0和我越來越腐敗的堆。
任何建議:爲什麼?
在'deleteInventory'中,'length'變量在您使用時未初始化。 – lurker
你可能已經完成了關閉第二個指針的指針運算。 - 只有建議。有像特殊的malloc庫和valgrind這樣的工具可以指出你的問題。編輯:@mbratch看起來有一個解決方案,除非長度是一個全局變量。 +1 –
@mbratch'長度'是全局變量:) – pydevd