2016-09-06 2 views
-2

Je suis confronté à un problème, j'écris ce code dans windows qui lit chaque ligne du fichier. et ça marche bien dans Windows 7 mais pas dans liunx. Je ne peux vraiment pas le comprendre. Est-ce que quelqu'un peut m'aider?pourquoi ce code fonctionne bien dans Windows mais pas dans 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; 
} 

moi et mes camarades de classe trouve que les « fgets » dans ce code est erroné, mais je ne sais pas que cela fonctionne bien dans les fenêtres.

+0

Ce n'est clairement pas C! – Olaf

Répondre

1

Dans votre code, buffer est laissé en l'état. Donc, il peut très bien (et le plus probable à) pointe vers un emplacement de mémoire invalide. L'accès à la mémoire invalide appelle undefined behavior. Une fois que votre programme atteint UB, absolument rien n'est garanti.

Vous devez indiquer buffer à un emplacement de mémoire valide avant de pouvoir l'utiliser dans fgets().