6

何らかの理由で、toCheck 変数の値が消去されてしまい、その理由がわかりません。助言がありますか?

bool
check(string toCheck){
    printf("toCheck: %s\n", toCheck.c_str());
    ifstream list;
    list.open("list.txt");
    string temp;
    while(list){
        getline(list,temp);
        printf("toCheck: '%s' temp: '%s'\n",toCheck.c_str(), temp.c_str());
        if(temp == toCheck){
            printf("Username exists\n");
            return false;
        }
    }
    printf("returning true\n");
    return true;
}

渡されるものは次のとおりです。

出力は次のとおりです。

toCheck: TestTrevor  
toCheck: '' temp: 'Trevor'  
toCheck: '' temp: ''  

Username exists
4

1 に答える 1

4

あなたのコメントから:

プロセス(これは私が取り組んでいるVoIPプロジェクトのサーバーです)をフォークして使用していて、gdbが機能していなかったため、デバッグが非常に困難です(これが私が使用している理由ですprintf) 。子プロセス。

強調鉱山。

動的に割り当てられたメモリがtoCheck実際にフォークされたプロセスに組み込まれなかった場合、または作成されたが何らかの理由で破棄/上書きされた場合でも、驚くことはありません。

新しい情報:コメントアウトしてgetLine(list, temp);も消去されませんtoCheck、何か考えはありますか?

std::allocatorプログラムで実際にメモリを割り当てる必要があるのはこれが初めてです。


STLはフォークを念頭に置いて開発されたことがないため、このユースケースでは機能しない場合よりも完全に可能です。

デバッガーで何が起こっているかを確認できます。のメモリが割り当てられているアドレスと、メモリtoCheckが割り当てられているときに何が起こるかを確認しますがtemp、それは詳細です。

gdbに問題があるようですので、最初にアドレスをダンプしてみてください(printf("%x", &toCheck[0]);)。

于 2012-04-24T07:17:11.547 に答える