Segmentation Fault bei großen Vektoren

X

xtian_82

Jungspund
[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?!)
 
Zuletzt bearbeitet:
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);
}
 
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!
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

Last mit etc/passwd anzeigen lassen

dynamische Speicherreservierung

Segmentation fault -- warum?

Zeichenketten

Zurück
Oben