解除分配矩形 2D 数组会根据尺寸产生错误

Deallocating rectangular 2d arrays gives error depending on dimensions

本文关键字:错误 2D 数组 解除分配      更新时间:2023-10-16

>我创建了一个动态分配的二维数组,当我尝试删除它时,根据数组的尺寸出现错误。

如果行数多于列数,则没有问题:

#include <iostream>
#include <fstream>
using namespace std;
int main(){
int num_rows = 8;
int num_cols = 6;
char **charBoard = new char*[num_rows+1];
for(int i = 0; i<=num_cols; i++){
charBoard[i] = new char[num_cols+1];
}
for (int i = 0; i <=num_rows; i++){
delete[] charBoard[i];
}   
//free the main array
delete[] charBoard;
return 0;   
}

如果列数多于行数,则会出现错误:

#include <iostream>
#include <fstream>
using namespace std;
int main(){
int num_rows = 4;
int num_cols = 6;
char **charBoard = new char*[num_rows+1];
for(int i = 0; i<=num_cols; i++){
charBoard[i] = new char[num_cols+1];
}
for (int i = 0; i <=num_rows; i++){
delete[] charBoard[i];
}   
//free the main array
delete[] charBoard;
return 0;   
}

然后我得到这个错误: 已中止(核心已转储(

我不知道为什么。 我是否不正确地删除了某些内容?

填充数组时,变量名称出错:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
int num_rows = 4;
int num_cols = 6;
char **charBoard = new char*[num_rows+1];
for(int i = 0; i <= num_cols; i++) {
^^^^^^^^^
charBoard[i] = new char[num_cols+1];
}
for (int i = 0; i <= num_rows; i++) {
^^^^^^^^^
delete[] charBoard[i];
}   
//free the main array
delete[] charBoard;
return 0;   
}

以下是代码的更正版本:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
int num_rows = 4;
int num_cols = 6;
char **charBoard = new char*[num_rows+1];
for(int i = 0; i <= num_rows; i++) {
charBoard[i] = new char[num_cols+1];
}
for (int i = 0; i <= num_rows; i++) {
delete[] charBoard[i];
}   
//free the main array
delete[] charBoard;
return 0;   
}