1

我用 C++(控制台)编写了一个简单的 Langtons Ant。但是(不知道为什么)每次运行程序时我都会转储一个核心:

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
    srand(time(NULL));

    bool endGame = false;
    enum compass {north, east, south, west};
    compass dir = north;
    int x = 0, y = 0;
    int n = 30, m = 30;

    int **board = new int*[n];
    for(int i = 0; i <n; i++)
        board[i] = new int[m];

    for(int i=0; i<n; i++)
        for(int j=0; j<m; j++)
            board[i][j] = rand()%2;

    long count = 0;
    while(!endGame)
    {
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                //Print board
                if(board[i][j] == 0)
                    cout << '+';
                else
                    cout << '#';
            }
            cout << endl;
        }

        //Ant
        if (board[x][y] == 0)
        {
            board[x][y] = 1;
            switch (dir){
            case north:
                dir = east;
                x = ((x+1)%m);
                break;
            case east:
                dir = south;
                y = ((y-1) % n);
                break;
            case south:
                dir = west;
                x = ((x-1) % m);
                break;
            case west:
                dir = north;
                y = ((y+1) %n);
                break;
            }
        }else
        {
            board[x][y] = 0;
            switch(dir){
            case north:
                dir = west;
                x = ((x-1) % m);
                break;
            case west:
                dir = south;
                y = ((y-1) % n);
                break;
            case south:
                dir = east;
                x = ((x+1)%m);
                break;
            case east:
                dir = north;
                y = ((y+1) %n);
                break;
            }
        }
        cout << endl << count << endl;
        count++;
        cin.sync();
        cin.get();
    }
    cin.sync();
    cin.get();
    return 0;
}

我怎样才能摆脱这个错误?

4

1 回答 1

4

它可能是这样使用模数的:

x = ((x-1) % m);

请记住negative % positive = negative,这意味着您可以越界。

于 2013-05-10T14:29:20.153 回答