Break error on cout

I'm writing an easy Game Of Life simulator. Everything works smoothly except at the very end, when the result is printed by cout I get a break error. I don't understand why and I would like to ask for your help.

variables

#include <iostream>
using namespace std;

struct cell
{
    bool isAlive;
    int posX;
    int posY;
    int numberOfAliveNeighbours;
    char group;
};
int cellNumber;
cell *cellTable = new cell[cellNumber];
int numberOfTunrs;

main:

int main()
{
        int x;
        int y;
        int cellCounter = 0;
        cin >> x >> y;
        cellNumber = x*y;
        cin >> numberOfTunrs;
        for (int i = 0; i < x; i++)
        {
            for (int j = 0; j < y; j++)
            {
                char cellAliveChar;
                cin >> cellAliveChar;
                if (cellAliveChar == '#')
                {
                    cellTable[cellCounter].isAlive = true;

                }
                else if (cellAliveChar == '.')
                {
                    cellTable[cellCounter].isAlive = false;

                }
                cellTable[cellCounter].numberOfAliveNeighbours = 0;
                cellTable[cellCounter].group = '#';
                cellTable[cellCounter].posX = j;
                cellTable[cellCounter].posY = i;
                cellCounter++;

            }
        }

        doTurns(x, y);
        int result;
        result = countGroups();
        **cout << result << endl;**
        //here is breakpoint 
        cin >> x;


}

countGroups (idk if it's relevant):

int countGroups()
{
    int max = 0;
    int current;
    int i = 0;
    char checkingGroup = 'A';
    do
    {
        current = 0;
        for (int j = 0; j < cellNumber; j++)
        {
            if (cellTable[j].group == checkingGroup + i)
            {
                current++;
            }
        }
        i++;
        if (current > max)
        {
            max = current;
        }
    } while (current != 0);

    return max;

}

the breakpoint screenshot:

Click to view the screenshot

Upvotes: 0

Views: 37

Answers (1)

user7860670
user7860670

Reputation: 37523

The problem is cellTable declaration:

int cellNumber;
cell *cellTable = new cell[cellNumber];

Global variables are implicitly initialized with 0 so cellNumber will point to array of 0 size and any attempt to access cellTable items leads to undefined behavior.

It would be better to make all variables local and pass them to functions explicitly. Instead of manually allocating array you should use std::vector, or at least allocate after assigning an appropriate number to cellNumber (after getting x and y values).

Upvotes: 1

Related Questions