Программа на c ++ не выполняется с `# include <cmath>` - PullRequest
0 голосов
/ 06 мая 2020

Я пишу программу для своего класса, которая решает одну за другой несколько проблем. Эта часть:

#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

int main() {

    ifstream data;
    data.open("data.txt");

    //LOAD VALUES
    int d[200][320];

    for(int i=0;i<200;i++){
        for(int j=0;j<320;j++){
            data>>d[i][j];
        }
    }

int m=1,c=0;//max length, current length

    for(int i=0;i<320;i++){//columns
        for(int j=1;j<200;j++){//rows

            if(d[i][j]==d[i][j-1])c+=1;
            else if(c>m){
                m=c;    
                c=0;
            }
            else c=0;

        }
    }

    cout<<"max length: "<<m<<endl;
return 0;
}

ищет самую длинную вертикальную линию идентичных значений в массиве. Я прокомментировал другие части программы, одна из которых требует библиотеки cmath. Когда я компилирую вышеупомянутую часть с помощью #include<cmath>, выполнение длится неоправданно долго и не дает вывода на cout, а только пустую строку. Он работает правильно, когда я не включаю cmath. Есть идеи, почему это так и как это исправить? Вот ссылка на "data.txt"

Изменить: он перестал работать даже после удаления #inclde<cmath>. Правильность выполнения программы кажется совершенно случайной.

1 Ответ

0 голосов
/ 06 мая 2020

Включение cmath не имеет ничего общего с вашей проблемой.

У вас неопределенное поведение, называемое переполнением буфера, при анализе данных. Вот живая демонстрация с проверкой индекса (генерируется исключение). В основном вы испортили порядок индексов.

Вот фиксированная версия вашего кода (с проверкой индекса).

Кстати, ваш код очень беспорядочный, научитесь разделять код на более мелкие функции. примитивная демонстрация (можно сделать лучше, но для новичка подойдет).

...