[英]C++ can't delete the second dimension of a 2D array
我正在嘗試創建一個指針數組,每個指針都是一個只有 1 個 integer 的數組。 然后我想打印這個 integer 並且在我打印它之后,我想刪除這個指針,這樣它就不能再打印了。 問題是這個命令“delete[] id_number[i];” 似乎不起作用。
The code:
using namespace std;
int main()
{
int** id_number= new int* [12];
for (int i = 0; i < 12; i++)
{
id_number[i] = new int[1];
id_number[i][0] = i;
}
for (int i = 0; i < 12; i++)
{
cout << "id_number ["<< i << "] [0] = "<< id_number[i][0] << endl;
delete[] id_number[i]; //Trying to delete each pointer after printing the
//integer
}
cout << endl << "After the end of loop" << endl;
cout << "id_number [" << 5 << "] [0] = " << id_number[5][0] << endl;
return 0;
The outcome:
id_number [0] [0] = 0
id_number [1] [0] = 1
id_number [2] [0] = 2
id_number [3] [0] = 3
id_number [4] [0] = 4
id_number [5] [0] = 5
id_number [6] [0] = 6
id_number [7] [0] = 7
id_number [8] [0] = 8
id_number [9] [0] = 9
id_number [10] [0] = 10
id_number [11] [0] = 11
After the end of loop
id_number [5] [0] = 5 // why does this print work? didn't i delete the pointer "id_number
// [5]" inside the loop??
刪除條目后
delete[] id_number[i]
將剛剛刪除的指針設置為這樣的 nullptr
delete[] id_number[i]; id_number[i] = nullptr;
刪除數組中的所有指針后,您仍然擁有占用資源的數組。 因此它也必須刪除
delete[] id_number; id_number = nullptr;
這應該正確釋放所有資源。 如果您然后如 WhozCraig 所述嘗試非法訪問已刪除的資源,則會發生不安全行為,而我看起來確實應該這樣做,正如 WhozCraig 再次提到的那樣,只是不安全行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.