c++的新手,并得到一个奇怪的分割错误

New to c++ and getting a odd segmentation fault error

本文关键字:一个 分割 错误 新手 c++      更新时间:2023-10-16

我继续收到这个奇怪的错误,它错误地打印了我的解决方案。我认为这与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。