初始化全局变量时出现运行时错误

时间:2016-06-26 16:31:17

标签: c++ initialization global-variables runtime-error

我的代码只是从42个不同的文本文件中读取问题并解决它们,然后打印出解决方案。

我知道这不是一个好习惯,但我使用的是全局变量,例如

Customer *customers;
vector<int> *schedules;
double **distanceMatrix;

并假设我必须这样做。

初始化distanceMatrix时出现问题:

distanceMatrix = new double*[n];
for (int i = 0; i<n; i++)
    distanceMatrix[i] = new double[n];

我无法理解的部分是,我得到的运行时错误不是第一个问题,不是第二个问题,而是9到25之间的随机问题。 因此,我很确定文件格式正确。

我没有任何语法错误。

有时,从文本文件9中读取时会出现运行时错误,有时是13,有时是22等。

我认为在初始化全局变量时我会遗漏一些技巧。也许我需要像flush这样的东西。

我做错了什么?

我也尝试过一次只读一个文件,而不是用循环读取所有文件。 不会一次又一次地初始化全局变量。我没有运行时错误。

一个最小的例子:

vector<int> **trucks;
vector<int> **presellers;
Customer *customers;
Customer *sortedCustomers;
double **distances;
int type, m, n, t, D, Q;
int id;
void readFromFile(const char *prefix, int instanceId)
{
    stringstream fileName;
    id = instanceId;
    fileName << prefix << instanceId << ".txt";
    FILE *file = fopen(fileName.str().c_str(), "r");
    fscanf(file, "%d %d %d %d\n", &type, &m, &n, &t);
    fscanf(file, "%d %d\n", &D, &Q);

    trucks = new vector<int> *[m];
    presellers = new vector<int> *[m];
    for (int i = 0; i<m; i++)
    {
        trucks[i] = new vector<int>[t];
        presellers[i] = new vector<int>[t];
    }
    customers = new Customer[n];
    sortedCustomers = new Customer[n];

    distances = new double*[n];
    for (int i = 0; i<n; i++)
        distances[i] = new double[n];

    int i, d, q, f, a;
    float x, y;
    fscanf(file, "%d %f %f %d %d %d %d\n", &i, &x, &y, &d, &q, &f, &a);
    createCustomer(i, x, y, d, q, f, a, t); // read depot
    for (int j = 1; j<n + 1; j++) // read customers
    {
        fscanf(file, "%d %f %f %d %d %d %d\n", &i, &x, &y, &d, &q, &f, &a);
        createCustomer(i, x, y, d, q, f, a, t);
        for (int k = 0; k<a; k++)
            fscanf(file, "%d ", &(customers[j].list[k]));
    }




    for (int j = 0; j<n-1; j++) // compute distance matrix
        for (int k = j + 1; k<n; k++)
            computeDistance(j, k);


}

int main()
{
    const char *inputPrefix = "t"; // prefix of the instance files.

    int begin = 1;
    int end = 42;

    for (int i = begin; i <= end; i++)
    {       
        readFromFile(inputPrefix, i); // read instance from file
    }
    system("pause");
    return 0;
}

输入:

https://www.dropbox.com/s/kdchj1g3e13aic8/files.zip?dl=0

0 个答案:

没有答案