Ошибка в моем коде - логическая таблица истинности

В настоящее время я работаю над программой, которая печатает таблицу истинности с 5 переменными. Я использую 2d массив. Мой код в настоящее время создает таблицу, но говорит, что она повреждена, и «стек вокруг переменной« таблица »был поврежден. Любая помощь?

#include <iostream>
using namespace std;

int main() {
    bool table[5][32];

    for (int i = 0; i < 32; i++) {
        for (int j = 0; j < 5; j++) {
            table[i][j] = ((i >> j)& 1);
        }
    }

    for (int i = 0; i < 32; i++) {
        for (int j = 0; j < 5; j++) {
            cout << table[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

Это домашнее задание, поэтому я хотел бы понять его, а не просто получить ответ.


person phillis    schedule 07.03.2016    source источник


Ответы (2)


Индекс неверный. Доступны только с table[0] по table[4], поэтому доступ с table[5] по table[31] незаконен.

Попробуй это:

#include <iostream>
using namespace std;

int main() {
    bool table[32][5]; // swap 32 and 5

    for (int i = 0; i < 32; i++) {
        for (int j = 0; j < 5; j++) {
            table[i][j] = ((i >> j)& 1);
        }
    }

    for (int i = 0; i < 32; i++) {
        for (int j = 0; j < 5; j++) {
            cout << table[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}
person MikeCAT    schedule 07.03.2016
comment
Таким образом, замена этих значений просто выравнивает их с циклами for, которые у меня есть для назначения переменных и печати? - person phillis; 07.03.2016
comment
Да, вы добавляли к переменной i в цикле for до 32, но в первом массиве было всего 5 ячеек. - person fordcars; 07.03.2016

Попытка прочитать значения за пределами массива.

Если вам нужна матрица 5x32, используйте код ниже:

    for (int i = 0; i < 5; i++) {          // 32-> 5
        for (int j = 0; j < 32; j++) {     // 5->32

Если вам нужна матрица 32x5, замените код ниже:

    bool table[32][5];        //it was table[5][32];
person Digital_Reality    schedule 07.03.2016