-3
新手C問題。我在我的「數組」結構中有動態的int數組「n」,我創建了一個「數組」的實例「arr」,在使用自定義寫函數進行一些操作後(不確定它們是否正確)但是我想刪除「n」 。免費()不會釋放我的動態(與malloc)數組在C
int main() {
Array arr = init_arr(5);
for (int i = 0; i < arr.length; i++) {
arr.n[i] = i;
}
print_arr(arr); // prints 0 1 2 3 4
add_to_arr(&arr, 228);
print_arr(arr); // prints 0 1 2 3 4 228
remove_from_arr(&arr, 0);
print_arr(arr); // prints 1 2 3 4 228
free_arr(arr);
// ? free_arr_IDK(&arr.n);
// ? free(arr.n); // even with this function it wont delete
print_arr(arr); // ??? prints 1 2 3 4 228
}
但刪除的數字數組,並打印「arr.n」,而不是亂後,它打印我的陣列,正是因爲它是調用free()之前。輸出:
Array size: 5 {0 1 2 3 4 }
-- added <228> to end of array
Array size: 6 {0 1 2 3 4 228 }
-- removed element #0
Array size: 5 {1 2 3 4 228 }
Array size: 5 {1 2 3 4 228 }
Press any key to continue.
1.是否預期這種行爲? 2.如果沒關係,哪個函數真的刪除了「arr.n」? free_arr(arr)或free_arr(& arr)?
無法保證使用無效指針會導致崩潰或任何有趣的事情。它可能看起來仍然有效,沒關係。 – Deduplicator
@SeekAddo由於分配和取消分配不是結構的ctors的一部分,複製結構的指針「n」仍然指向相同的地址。 – Rotem