Я сгенерировал исключение Run-time # 3 в моем коде c ++ - PullRequest
0 голосов
/ 26 февраля 2020

Исключением является «Ошибка проверки времени выполнения № 3 - переменная VfMin используется без инициализации». Что я могу с этим сделать? Пожалуйста, я не знаю, как обращаться с исключениями, если кто-то решил мне их объяснить.

#include <fstream>
#define NMAX 50
#define INF 10000

using namespace std;

int n, x0;
double C[NMAX][NMAX];
int pre[NMAX], M[NMAX];
double d[NMAX];

void Init();
void Print();

int main()
{
//This is the algorithm itself
    int i, VfMin, j;
    double dMin;
//Initializing the values
    Init();
    for (j = 1; j < n; j++)
    {
        dMin = INF;
        for (i = 1; i <= n; i++)
        {
            if (!M[i] && dMin > d[i])
            {
                dMin = d[i];
                VfMin = i;
            }
        }
        M[VfMin] = 1; //Generated exception
        for (i = 1; i <= n; i++)
        {
            if (!M[i] && d[i] > dMin + C[VfMin][i])
            {
                pre[i] = VfMin;
                d[i] = dMin + C[VfMin][i];
            }
        }
    }
//Printing the results
    Print();
    return 0;
}

1 Ответ

0 голосов
/ 26 февраля 2020

Вы устанавливаете значение переменной VfMin внутри блока if. Если условие if никогда не является true, то ваш VfMin остается неинициализированным. Вы можете установить VfMin на значение по умолчанию. Это может быть примером (предполагая, что остальная часть алгоритма написана хорошо, этот код должен работать):

int main()
{
    //This is the algorithm itself
    int i, VfMin, j;
    double dMin;
    //Initializing the values
    Init();
    for (j = 1; j < n; j++)
    {
        dMin = INF;
        VfMin = -1; // default value
        for (i = 1; i <= n; i++)
        {
            if (!M[i] && dMin > d[i])
            {
                dMin = d[i];
                VfMin = i;
            }
        }

        if (VfMin != -1)
        {
            M[VfMin] = 1;

            for (i = 1; i <= n; i++)
            {
                if (!M[i] && d[i] > dMin + C[VfMin][i])
                {
                    pre[i] = VfMin;
                    d[i] = dMin + C[VfMin][i];
                }
            }
        }
    }
    //Printing the results
    Print();
    return 0;
}

Также обратите внимание, что в C++ первый элемент и массив n элементы имеют индекс 0, а последний элемент - индекс n-1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...