Где тут логика? - c++

260
15 января 2018, 08:59

Я не ошибся словом, именно логика.

Создаются 2 массива:

  1. Массив объектов класса Card - таблицы с числами.
  2. Главные числа этого массива, в данном случае степени двойки.

Должно создаваться 4 значения. С объектами срабатывает, а с числами нет.

Код:

int* AllNumList;
int Cmin=0, Cmax=0;
void Game()
{
    bool end = 0;
    int numOfIterations = 0;
    int maxNum = 1;
    while (maxNum <= Cmax)
    {
        numOfIterations++;
        maxNum = pow(2, numOfIterations);
    }
    numOfIterations--;
    maxNum = pow(2, numOfIterations);
    Card* card = new Card [numOfIterations +1];
    AllNumList = new int [numOfIterations+1];
    for (int i = 0; i <= numOfIterations;i++)
    {
        AllNumList[i] = pow(2, i);
        card[i].AddGenNumber(pow(2, i));
    }
}

Первая итерация цикла:

Последняя итерация:

Answer 1

Почему оно не работало останется загадкой навсегда.
Исправил таким образом:

int* AllNumList;
int Cmin=0, Cmax=0;
void Game()
{
    bool end = 0;
    int numOfIterations = 0;
    int maxNum = 1;
    while (maxNum <= Cmax)
    {
        numOfIterations++;
        maxNum = pow(2, numOfIterations);
    }
    numOfIterations--;
    maxNum = pow(2, numOfIterations);
    Card* card = new Card [numOfIterations+1];
    int* asd = new int[numOfIterations + 1];
    for (int i = 0; i <= numOfIterations;i++)
    {
        asd[i] = pow(2,i);
        card[i].AddGenNumber(pow(2, i));
    }
    AllNumList = asd;
 }
Answer 2

Пойдем по порядку.

bool end = 0;
int numOfIterations = 0;
int maxNum = 1;
while (maxNum <= Cmax)

На этом этапе ваш maxNum равен 1, а Cmax равен нулю. Условие не выполняется, как и содержимое цикла.

numOfIterations--;
maxNum = pow(2, numOfIterations);

Здесь numOfIterations из 0 становится равен -1. В maxNum теперь 2 в степени -1.

Card* card = new Card [numOfIterations+1];
int* asd = new int[numOfIterations + 1];

Здесь выделяется память для 0 объектов типа Card и 0 объектов типа int. Это undefined behavior.

READ ALSO
Не удаляется последняя строка в QTableWidget

Не удаляется последняя строка в QTableWidget

Есть кнопка delete при нажатии которой удаляется выделенная строкаЕсли в таблице больше одной строки, то проблем с удалением нету, однако когда...

239
Работа с Realm в ViewHolder

Работа с Realm в ViewHolder

Не могу реализовать функцию избраное в бд RealmОпыта с ORM ранее не имел поэтому прошу извенить за вопрос

195
org.apache.axis.wsdl.toJava.DuplicateFileException: Duplicate file name

org.apache.axis.wsdl.toJava.DuplicateFileException: Duplicate file name

Пытаюсь распарсить wsdl в RPC/Encoding стиле с помощью утилиты h WSDL2Java от Apache Axis 14

216
Работа со строками и файлами

Работа со строками и файлами

Как в стек записать строки и вывести их в файл в обратном порядке на java?

252