2012-05-10 6 views
2

ここには、という名前のクラスの一部であるシスマ(すべての宣言は別ファイルにあります)があります。最初の関数は次の関数を呼び出すことになっています。これはいくつかのツリーを読み取る再帰関数です(Arbreツリーのカスタム実装です)。C++ - 関数呼び出しでプログラムが失われる

プログラムの実行中に、関数呼び出しの直前に "関数を入力する"という行が表示されますが、「新しいノード」行は決して取得されません。だから私のプログラムは関数呼び出しと関数自体の間で、たとえ再帰呼び出しの前でもどこかで失われてしまいます。私は前にこのような問題はなかった。何が起こっているのかについての手がかりは?

#include "Sistema.hpp" 

    ............ 

    list<int> Sistema::proc_peticion(int pelicula, int tiempo, int tamano){ 
    list<int> srv; 
    Arbre<int> arb = estructura; 
    bool unidad_tmp = false; 
    int dist = 0, bw = 0; 
    cout << "entering function" << endl; 
    camino(srv, arb, pelicula, tiempo, tamano, unidad_tmp, dist, bw); 
    return srv; 
    } 

    ............ 

    void Sistema::camino(list<int>& srv, Arbre<int>& arb, const int& pel, const int& tmp, const int& size, bool& unidad_tmp, int& dist, int& bw){ 
    cout << "new node "; 
    if (not arb.es_buit()){ 

     .................. 

    } 
} 

私はそれを読みやすくするために、役に立つかもしれないコードの部分だけを残してみました:ここ

コードがあります。あなたが何かもっと必要なものがあれば教えてください。

あなたはC/C++でのファイルへの書き込み時に、事前

+2

'cout <<"新しいノード "<< endl;' endlは行末+フラッシュを意味するので、コンソールにテキストが表示されます(または 'cout <<"新しいノード "<< flush"で十分かもしれません) – nothrow

+0

http://stackoverflow.com/questions/213907/c-stdendl-vs-n – nothrow

+0

Yossarianが追加されたときにendlを追加します。 Endlは新しい行を追加しますが、フラッシュも行います。 – Ras

答えて

4

にあなたはカミノ関数内ENDLを書くべきおかげで、データは必ずしもファイルに書き込まれていないが、そのまで、メモリバッファに座っていますいっぱいになるか、明示的にディスクに書き込まれます(フラッシュされます)。

ここで起こっているのは、書き込みが行われていることです。プログラムは引き続き機能内でハングします。書き込みを実行するendlを書きたくない場合は、その後cout.flush()に電話をかけることができます。

+0

ありがとう!今私はこの嫌な機能をデバッグし続けることができます... – Albert

関連する問題