[英]Memory leak when printing 2D array
打印二維數組時出現內存泄漏,我將數據從向量循環到稱為網格的向量中
Grid 中的某些索引為 null,例如 grid[8][8] 為 null,但 grid[1][1] 的值為 3。當我顯示具有 null 值的網格索引時,我會出現內存泄漏。
以下是我的代碼,任何建議將不勝感激!
void populateAppendixB(vector<string> cityLocation, int **grid, int col, int row) {
vector<int> data = appendixB_data(cityLocation);
vector<string> appendixB_coordinates = getCoordinates(cityLocation);
vector<int> x_value = returncolValue(appendixB_coordinates);
vector<int> y_value = returnrowValue(appendixB_coordinates);
//loop data into grid[][]
for (int i = 0; i < x_value.size(); i++) {
grid[x_value[i]][y_value[i]] = data[i];
}
cout << " ";
//Top outer Grid
for (int i = 0; i < col + 2; i++) {
cout << " # ";
}
cout << " # ";
cout << endl;
//end
//y-axis
for (int j = row; j >= 0; --j) {
cout << " " << j << " # ";
for (int i = 0; i <= col; ++i) {
//displaying data
if(grid[i][j] == 0) {
cout << " ";
}
else {
cout << grid[i][j] << " ";
}
}
//Right outer Grid
cout << "#";
cout << endl;
}
//Last row of #
cout << " ";
for (int i = 0; i < col + 2; i++) {
cout << " # ";
}
cout << " # ";
cout << endl;
cout << " ";
//x-Axis
for (int i = 0; i <= col; i++) {
cout << i << " ";
}
cout << endl;
}
您使用grid[x_value[i]][y_value[i]] = data[i];
,但不會填充所有grid
因為您只填充grid
每一列的一個值(您只執行此循環: for (int i = 0; i < x_value.size(); i++) {
)。 除非傳入的網格預先填入0
正確(不可能告訴您提交的代碼),否則這可能是未定義的行為。
即使它是預先填充的二維數組,當您打印grid
的元素時,您也會從[0, cols]
和[0, rows]
進行迭代,這可能不是您想要的(迭代cols+1
列和rows+1
行。因此,至少最后一個值將訪問可能無效的內存。
正如之前的評論所提到的,最好只使用std::vector
(例如std::vector<std::vector<int>>
而使用.at(i).at(j)
訪問使用的元素C++ 異常而不是訪問壞內存)甚至std::array
,它們更擅長干凈地預防和捕獲許多問題。 如果您擔心速度,這可能不是什么大問題,您可以通過例如通過引用傳遞、將事物包裝在智能指針中(如果適用)、移動語義等來避免復制。
我通過將所有二維數組值設置為 { } 解決了我的問題,然后使用我特別想要的值填充網格數組。
它解決了內存泄漏問題,但我不確定這是否是一個好習慣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.