我想创建2D指针布尔数组,但是一旦声明并尝试对其进行初始化,就会遇到分段错误。我尝试仅声明数组而不初始化它,并且也尝试初始化数组。
我的程序中有一些函数和全局变量,并尝试制作除主函数#include外的所有东西,并使用命名空间std;。进入评论,但我仍然收到错误: 只声明:
int main(){
// Variable declarations. You can add more if necessary
bool **world;
int nrows, ncols;
char next;
cout << "Enter world dimensions (rows and columns): ";
cin >> nrows >> ncols;
**world = new bool*[ncols];
for (int i = 0; i < ncols; i++) {
world[i] = new bool[nrows];
}
声明和初始化:
int main(){
// Variable declarations. You can add more if necessary
bool **world;
int nrows, ncols;
char next;
cout << "Enter world dimensions (rows and columns): ";
cin >> nrows >> ncols;
**world = new bool*[ncols];
for (int i = 0; i < ncols; i++) {
world[i] = new bool[nrows];
}
for (int i = 0; i < ncols; ++i) {
for (int j = 0; j < nrows; ++j) {
world[i][j] = false;
}
}
错误是:Segmentation fault (core dumped)
。
答案 0 :(得分:1)
**world = new bool*[ncols];
等效于world[0][0] = new bool*[ncols];
,因为世界尚未初始化,这是不确定的行为。这仅是因为指针可转换为bool。如果您的数组是int
之类的其他类型,则您的代码将无法编译。
您实际想要做的就是分配给指针:
world = new bool*[ncols];
std::vector
将使您的代码更简单,更安全,这一行替换了所有初始化代码,并且没有内存泄漏:
std::vector<std::vector<bool>> world(ncols, std::vector<bool>(nrows, false));
我是一般的多维数组,矢量的性能较差,最好使用一维数组并通过以下方法计算索引:col * nrows + row