c++的新手,并得到一个奇怪的分割错误
New to c++ and getting a odd segmentation fault error
我继续收到这个奇怪的错误,它错误地打印了我的解决方案。我认为这与printSolution()
方法有关,因为它是打印"Q Q*Q Q Q Q"(尽管这是不正确的),然后我得到了一个分割错误。
这是我的.cpp
:
#include "NQueens.h"
#include<iostream>
using namespace std;
NQueens::NQueens()
{
}
NQueens::~NQueens()
{
cout <<"Destroying an object"<<endl;
}
void NQueens::printBoard(int board[], int N)
{
std::cout<<endl;
for(int i = 0; i<N; i++)
{
int chessBoard[N];
chessBoard[board[i]] = 1;
for(int j =0; j<N; j++)
{
if(chessBoard[j]==0)
std::cout<<"* ";
else
std::cout<<"Q ";
}
std::cout<<endl;
}
}
bool NQueens::safePlace(int row, int col, int board[])
{
for(int i = 0; i<row; i++)
{
if((board[i] == col) || (i-row)==(board[i]-col) || (i-row) == (col-board[i]))
return false;
}
return true;
}
void NQueens::solve(int N)
{
int board[N];
int row = 0;
while(row<N && row>-1)
{
// condition that the row is occupied and the queen is safe to place
if(board[row]>-1 && board[row]<(N-1))
{
for(int i = board[row]+1; i<N; i++)
{
//checks for safety
if(safePlace(row, i, board))
{
board[row]=i;
++row;
break;
}
else if(i==(N-1))
{
board[row]=-1;
--row;
}
}
}
else if(board[row]==-1 && board[row]<(N-1))
{
for(int i = 0; i<N;i++)
{
if(safePlace(row, i, board))
{
board[row]=i;
++row;
break;
}
else if(i==(N-1))
{
board[row]=-1;
--row;
}
}
}
else
{
board[row]=-1;
--row;
}
}
printBoard(board,N);
}
int main()
{
NQueens driver;
driver.solve(8);
return 0;
}
这可能是因为循环语句达到null吗?
我不知道solve()
在使用之前在哪里初始化board
的内容。
因此,对safePlace()
的调用传递初始化为垃圾值的board
数组,从而触发segfault。
相关文章:
- 删除映射和分割错误中的一个过去结束元素
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- 为什么最后一个拆分函数会导致分割故障?如何解决此问题
- 在一个动态分配的数组的程序中分割故障
- 另一个C++奇怪的对象创建分割错误
- c++的新手,并得到一个奇怪的分割错误
- 有形状和圆形类,以及点类.创建将点类作为一个参数的圆时出现分割错误
- 试图使用递归找到一个数字的所有因子,最终会得到大数字的分割错误
- 使用MATLAB mex将矢量分配给另一个矢量时出现分割错误
- 如何在c++中检查一个很长的数的可分割性
- 如何分割一个二进制字符串来比较每个数字
- 为什么我得到一个分割错误时,尝试双迭代
- 为什么我得到一个分割错误在这个代码
- 用空格分割一个正/负整数字符串
- 制作一个2d的100x100数组,将其分割成4个25x25不同的输出
- 分割一个数字并存储在int数组中
- 分割LPSTR并将值相加为一个long
- 我的程序给我一个分割错误(c++)
- 为什么我得到一个分割错误,而通过这个向量迭代
- 为什么这个代码片段给我一个分割错误