Segmentation Fault bei großen Vektoren

Dieses Thema im Forum "C/C++" wurde erstellt von xtian_82, 16.01.2007.

  1. #1 xtian_82, 16.01.2007
    Zuletzt bearbeitet: 17.01.2007
    xtian_82

    xtian_82 Jungspund

    Dabei seit:
    13.09.2006
    Beiträge:
    11
    Zustimmungen:
    0
    [gelöst] Segmentation Fault bei großen Vektoren

    Hallo, habe folgendes kleine Beispielprogramm, welches mir für große Vektoren (N > 50000) ein Segmentation Fault während der Laufzeit liefert:
    Code:
    #define N 50000
    struct test { int z;};
    main() {
      struct test v[N] = { 0 };
      int i;
      for ( i = 1; i < N; i++ )
        if ( i*i < N )
          v[i*i].z = 1;
    }
    
    Weiß irgendwer, was genau ich dagegen machen kann? (Den vektor v[] global zu machen hilft auch nicht, schon probiert.)
    Irgendwelche Ideen, was hier genau passiert und was ich dagegen machen kann. (So groß ist der Vektor doch auch wieder nicht und ich brauche ihn sogar noch größer?!)
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. hwj

    hwj Doppel-As

    Dabei seit:
    23.06.2006
    Beiträge:
    131
    Zustimmungen:
    0
    Ort:
    Bei Buxtehude
    Es wird ja komplett auf dem Stack alloziert. Versuch mal:
    Code:
    #include <malloc.h>
    #define N 50000
    struct test { int z;};
    main() {
      struct test *v = (struct test*) malloc(sizeof(struct test) * N);
      int i;
      for ( i = 1; i < N; i++ )
        if ( i*i < N )
          v[i*i]->z = 1;
       free(v);
    }
     
  4. #3 xtian_82, 17.01.2007
    xtian_82

    xtian_82 Jungspund

    Dabei seit:
    13.09.2006
    Beiträge:
    11
    Zustimmungen:
    0
    Das ändert leider am Problem gar nichts, nur dass das kompilierte Programm um die Größe des Vektors kleiner ist (bei N = 50000 ca. 200KB). Bekomme aber immer noch ein "segmentation fault" und and der Größe des Vektors kann es doch nun wirklich nicht liegen, da der ja vergleichsweise winzig ist.
    Okay, alles klar, das Problem liegt an
    Code:
    if ( i * i < N )
    , da i*i einen Überlauf erzeugt. Wenn ich das ganze als
    Code:
    if ( i < sqrt(N) )
    umschreibe läuft das Programm problemlos.

    Danke!
     
Thema:

Segmentation Fault bei großen Vektoren

Die Seite wird geladen...

Segmentation Fault bei großen Vektoren - Ähnliche Themen

  1. Segmentation fault -- warum?

    Segmentation fault -- warum?: Hallo, liebe Forengemeinde. Ich habe mal versuch mit meinen spärlichen Programmierünsten in C++ ein programm zu schreiben, welches den...
  2. pacman verabschiedet sich mit 'segmentation fault'

    pacman verabschiedet sich mit 'segmentation fault': Tag auch. Ich suche jetzt seit 2 Tagen nach einer Lösung für mein Problem und dachte ein paar mal, sie gefunden zu haben - letztendlich steh ich...
  3. Segmentation Fault bei strcat?

    Segmentation Fault bei strcat?: Heyho, Ich habe folgendes Progrämmchen versucht, zu schreiben. (Was es machen soll, steht weiter unten ;) ). /* * filewatch.c * * Created on:...
  4. Segmentation Fault unter Firefox und Seamonkey

    Segmentation Fault unter Firefox und Seamonkey: Sobald ich yahoo.de öffnen möchte kracht mein Seamonkey und Firefox. Terminal Ausgabe: ---------- s.wiederspahn@ws5-43-fra:~> seamonkey...
  5. Segmentation fault at /usr/share/YaST2/clients/sw_single.ycp:162 Segmentation f

    Segmentation fault at /usr/share/YaST2/clients/sw_single.ycp:162 Segmentation f: Moin Moin, ich hab hier auf SLES 9 ein Problem mit yast. Starte ich ihn aus der Konsole (kein X vorhanden, und das soll / muss auch so bleiben)...