Segmentation fault Problem



  • hi,

    ich möchte hier Daten einlesen, und wenn die Höhe gleich der Breite ist funktioniert alles. Nur sobald die unterschiedlich sind, also kein Quadrat mehr sind, kommt ein segmentation fault. Nur ich weiß nicht woran es liegt.
    An der Speicherreservierung kann es nicht liegen, da ich diese auskommentiert und das array auch statisch angelegt hatte.

    mfg

    int getData(FILE* input)
    {
      int c = 0,h = 0,w = 0,x = 0,y = 0,z = 0;
    
      while(h < height)
      {
        for (w = 0; w < width; w++)
        {
          z = fgetc(input); 
    
          if (z != Leerzeichen  )
          { 
             c = (z - 48);
             y =  fgetc(input);
    
             if (y != Leerzeichen  )
             {
               c = (((z - 48)* 10) + (y - 48));
               x = fgetc(input);
    
               if (x != Leerzeichen  )
               {          
                 c = (((z - 48) * 100) + ((y - 48)* 10) + (x - 48)); 
               }
             }   
          }
          else
          {
            w--; 
          };
          data.pData[h][w] = c;   // <<-- hier tritt der segmentation fault auf
        }
        w = 0;
        h++;   
      }
    }
    


  • Gib doch mal die Werte von h und w vor dem Zugriff auf das Array aus.



  • ja per debugging hab ich mir die Werte angeschaut, konnte aber nichts aussergewöhnliches entdecken. Alles normal.

    mfg



  • Wie ist denn pData definiert? (vor allem: reicht der Platz?) Und warum nutzt du nicht die Möglichkeiten der IOStreams zur Eingabeformatierung (ein "cin>>pData[h][w];" edit: bzw. "scanf("%d",&pData[h][w]);" dürfte um einiges eleganter sein als dein Code ;))?



  • hab bin nicht so der Profi in Sachen programmieren, wie du wahrscheinlich erkannt hast 😉

    ja pData ist ein int array, und zu testzwecken hab ichs statisch mit [20][20] gemacht. Der Platz muss ausreichen, da ich nur 3x5 einlese.

    Aber wie meinst du das mit dem scanf? liest er mir dann bis zum Ende der Datei ohne
    Leerzeichen und Zeilenumbrüche mit einzulesen?

    mfg



  • scanf() (bzw. fscanf()) liest soviel ein wie gerade erforderlich ist - und im Gegensatz zu fgetc() kann es das gelesene selbständig als int, double etc interpretieren (und es überliest auch Whitespaces, auf die es trifft).

    btw, was steht eigentlich in width und height?



  • thx.
    In width und height steht in meinem Testfall 10 und 5.

    mfg


Anmelden zum Antworten