2016-09-06 4 views
-2

私は問題に直面しています、私はファイルの各行を読むウィンドウにこのコードを書いています。 Windows 7ではうまく動作しますが、liunxではうまく動作しません。私は本当にそれを理解することはできません。誰でも私を助けることができますか?なぜこのコードはWindowsではうまく動作しますが、Linuxではうまく動作しませんか?

list< list<string> > getTransRecordsFormFile(const char* fileName) 
{ 
    list< list<string> > res; 
    FILE* f = fopen(fileName,"r"); 
    if(f == NULL) { 
     cout << "load input file failed!" << endl; 
     exit(0); 
    } 
    else { 
     char *buffer; 
     while(fgets(buffer,MAX_LENTH,f) != NULL) { 
      list<string> v = splitStr(buffer, SPLITCHAR); 
      res.push_back(v); 
     } 
    } 
    fclose(f); 
    return res; 
} 

私と私のクラスメートは、このコードでは、「関数fgetsが」間違っていること、それを見つけるが、私はそれが窓に適していますかわかりません。

+0

これは明らかにCではありません。 – Olaf

答えて

1

コードでbufferはユニット化されたままです。だから、それは非常によく(そしておそらくに)無効なメモリの場所を指しているかもしれません。無効なメモリにアクセスすると、undefined behaviorが呼び出されます。あなたのプログラムがUBにヒットしたら、絶対に何もが保証されます。

bufferfgets()で使用する前に、有効なメモリ位置を指すようにする必要があります。

関連する問題