[英]c++ deallocate 2d int array error
在下面的代碼段中,我得到非常令人沮喪的錯誤。 多數民眾贊成在我的數組。
int **tab2 = new int*[3];
我像這樣分配。
for(i = 0; i < 10; i++) {
tab2[i] = new int[3];
tab2[i][0] = 40;
tab2[i][1] = 10;
tab2[i][2] = 100;
}
然后,在使用它之后,我想銷毀它。
for(i = 0; i < 10; i++) {
delete [] tab2[i];
}
delete [] tab2;
這會導致核心轉儲每一次。 我嘗試了許多不同的方法來銷毀它,每次都收到此錯誤。 我在這里弄錯了什么?
這個
int **tab2 = new int*[3];
不按照您的想法去做。
您需要一個包含十個(10)指針的數組,每個指針指向三個整數的數組。
new int*[3]
是一個包含三個指針的數組。
#include <iostream>
int main() {
int **tab2 = new int*[10];
for(int i = 0; i < 10; i++) {
tab2[i] = new int[3];
tab2[i][0] = 40;
tab2[i][1] = 10;
tab2[i][2] = 100;
}
for(int i = 0; i < 10; i++) {
delete [] tab2[i];
}
delete [] tab2;
}
用
int **tab2 = new int*[3];
您分配了一個大小為3的指針數組。
for(i = 0; i < 10; i++) {
tab2[i] = new int[3];
//...
}
您最多可以訪問索引9
。 那肯定會出錯。 刪除過程對我來說很好。 要修復它,您應該分配一個大小為10
而不是3
的指針數組,例如
int **tab2 = new int*[10];
看起來您想要做的是創建一個N by M數組,其中N在運行時是已知的,M是固定的(在本例中為3)。
為什么不這樣做呢?
{
std::array<int, 3> defaults = {{ 40, 10, 100 }};
std::vector<std::array<int, 3>> thing(10, defaults);
}
向量超出范圍時, thing
會自動釋放,它的大小可以在運行時設置。 您仍然可以通過相同的方式訪問結構:
thing[1][2] = 3
使用標准容器和智能指針可以輕松避免手動進行內存管理。 這樣做將使您的代碼更整潔,並減少了懸空指針和內存泄漏的機會。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.