Segmentation Fault beim Schreiben in binary-files ab 8191 byte



  • Hi,

    ich habe ein merkwürdiges Problem mit meinem C++ Code unter Linux (Ubuntu 9.04 als Virtuelle Maschine, Host System ist Windows XP):

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
      char out = (char)100;
    
      int nr = 8191;
    
      ofstream ofs("./bintestChar.bin");
      for(int i=1;i<=nr;i++)
      {
        ofs.write((const char*)&out, sizeof(out));
        cout << "written byte " << i << endl;
      }
      ofs.close();
    
      ifstream ifs("./bintestChar.bin");
      char in = (char)7;
      for(int i=1;i<=nr;i++)
      {
        ifs.read((char*)&in,sizeof(in));
        cout << "read float nr " << i << " => " << (i) << " byte" << endl;
      }
      ifs.close();
      return 0;
    }
    

    Beim Schreiben in binäre Dateien bekomme ich sobald die Variable nr (=Anzahl Bytes) größer oder gleich 8191 ist einen "Segmentation Fault". Das oben beschriebene Programm macht Ausgaben bis "written byte 8190" und dann kommt der Fehler.
    Ich habe die Datei nach Windows kopiert und ohne Änderungen über Visual Studio ausprobiert und es läuft problemlos durch (habe bis zu 10000 Byte ausprobiert).

    Es muss also irgendein Linux spezifisches Problem sein, dass er so kurz unter 8kB stoppt. Kann mir jemand helfen?

    Danke,
    xadian



  • Ok, hab's grad selbst rausgefunden. Die zu schreibende Datei liegt im Shared Folder der virtuellen Maschine und der hat als Dateisyste 'vboxsf'. Sobald ich den Pfad auf mein home Verzeichnis verändert habe gings auch mit größeren Dateien. Wäre trotzdem interessant zu erfahren woher genau der Fehler kommt/warum das Dateisystem Probleme mit solchen Operationen hat. Normale Textdateien gehen in beliebiger Größe zu erstellen...



  • gelöscht



  • xadian schrieb:

    Ok, hab's grad selbst rausgefunden. Die zu schreibende Datei liegt im Shared Folder der virtuellen Maschine und der hat als Dateisyste 'vboxsf'. Sobald ich den Pfad auf mein home Verzeichnis verändert habe gings auch mit größeren Dateien. Wäre trotzdem interessant zu erfahren woher genau der Fehler kommt/warum das Dateisystem Probleme mit solchen Operationen hat. Normale Textdateien gehen in beliebiger Größe zu erstellen...

    Ich hatte auch schon Probleme mit diesem Dateisystem, Hostsystem war Linux, Gastsystem Vista und in Vista wollte ich ein etwas größeres Visual Studio Projekt öffnen das in solch einem Verzeichnis lag und Visual Studio hat dabei immer den Dienst quittiert mit entsprechender Meldung. Nachdem ich das Projekt in das virtuelle Dateisystem kopiert hatte ging es ohne Probleme.

    Da ist das Dateisystem wohl einfach noch nicht ausgereift. Da du aber einen schönen kleinen Testfall hast könntest du das ja den Entwicklern melden 🙂


Anmelden zum Antworten