使用sting数组进入循环时程序崩溃

时间:2017-11-12 13:11:33

标签: arrays string for-loop

我无法弄清楚为什么这些代码行会导致我的程序崩溃。该程序没有编译或构建错误,我没有理由发生崩溃。

void systemutskrift() {
    int *i = new int;
    string Filnavn[7];
    string overskrift[7];
    Filnavn[0] = "trykk_kokekjele.txt";
    Filnavn[1] = "temperatur_varmtvannstank.txt";
    Filnavn[2] = "nivå_færskvannstank.txt";
    Filnavn[3] = "styrbord_ballast.txt";
    Filnavn[4] = "babord_ballast.txt";
    Filnavn[5] = "nivå_dieseltank.txt";
    Filnavn[6] = "oversikt_oksygentanker.txt";
    overskrift[0] = "Trykk i Kokekjele [BAR]";
    overskrift[1] = "Temperatur i Varmtvannstank [C]";
    overskrift[2] = "Nivå i Ferskvannstank [L]";
    overskrift[3] = "Styrbord Ballasttank [% full]";
    overskrift[4] = "Babord Ballasttank [% full]";
    overskrift[5] = "Nivå i Dieseltank [L]";
    overskrift[6] = "Oversikt Oksygentanker";

    ofstream systemutskrift;
    ifstream innfil;
    string line;
    systemutskrift.open("system.txt");
    for (*i = 0; *i < 7; *i++) {
        systemutskrift << setw(20) << overskrift[*i] << endl;
        systemutskrift << endl;
        innfil.open(Filnavn[*i]);
        if (innfil.is_open()) {
            while (getline(innfil, line)) {
                systemutskrift << line << endl;
            }
        }
        innfil.close();
    }
    systemutskrift.close();
    system("system.txt");
    system("pause");
    system("cls");
}

1 个答案:

答案 0 :(得分:0)

我认为你错过的是postfix(++)运算符的优先级高于dereference(*)运算符。

因此,你的程序所做的是它有效地首先递增指针,然后尝试取消引用它。这可能会导致您尝试访问您不允许访问的内存,从而导致其崩溃。

您可以通过使用括号来指明您的首选操作顺序,即(* i)++来解决此问题。

可以找到有关优先顺序的进一步说明here