【问题标题】:Program crashes when entering for loop, using sting arrays使用 sting 数组进入 for 循环时程序崩溃
【发布时间】:2017-11-12 13:11:33
【问题描述】:

我不明白为什么这些代码行会导致我的程序崩溃。该程序没有编译或构建错误,我没有给出崩溃的原因。

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");
}

【问题讨论】:

标签: arrays string for-loop


【解决方案1】:

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

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

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

关于优先级的进一步解释可以找到here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    相关资源
    最近更新 更多