2017-11-12 8 views
-1

なぜこれらのコード行がプログラムのクラッシュを引き起こすのかわかりません。プログラムにはコンパイルやビルドのエラーはなく、クラッシュの理由はわかりません。スティングアレイを使用してforループに入ったときにプログラムがクラッシュする

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

を見つけることができます。これを読んで、あなたの質問にそれを適用してください:https://stackoverflow.com/help/mcve –

答えて

0

私は何を見逃していることは後置(++)演算子は、間接参照(*)演算子よりも優先順位が高いということだと思います。

あなたのプログラムが行うことは、それが実質的にがポインタを最初にインクリメントしてを逆参照しようとすることです。これにより、アクセスが許可されていないメモリにアクセスしようとする可能性があり、アクセスがクラッシュする可能性があります。

この問題は、ブラケットを使用して、希望の操作順序、つまり(* i)++を示すことができます。優先順位のための

さらなる説明はhere

+0

これはinstantaniously私の問題を解決しました!ありがとうございました! – OlaNordmann

関連する問題