Größe von arrays

MX81

Grünschnabel
Hallo Ihr da draußen.

Hab ein Problem bei meinem Programm. Brauche ein array von der Größe [4282449][3]. Habe das Programm geschrieben. Beim Kompilieren gibt es keine Probleme. Aber wenn ich das Programm nun ausführen will, streikt es...
habe vor ner Weile festgestellt, dass arrays bis zu einer Größe von 2^x (x weiß ich leider nicht mehr) keine Problemmeldungen verursachen. Aber was, wenn ich eine größere Tabelle brauche? Brauche unbedingt diese Tabelle...
vielleicht weiß da jemand eine Lösung
 
Nun, es wäre ganz gut, wenn Du uns sagen würdest, inwiefern das Programm 'streikt'. Ein Array von über 12MB ist zwar nicht schön, aber es sollte gehen.
Probiere doch einfach mal zum Testen ein
Code:
void * pData = malloc(4282449 * 3);
Ist pData danach NULL? (Falls nicht, 'free' nicht vergessen!)
 
Also bei der Fehlersuche sagt er dass eine Zugriffsverletzung (Segmentation fault) in meinem Programm auftrat.
Hab hier einen Ausschnitt aus meinem Testprogramm:

int main()
{
int i;

float tabelle[4041500]; //hab hier irgendeine große Zahl genommen.


cin>>i;
cout<<i;



return 0;
}

Hier will er immer direkt einen Windows Error Report an windows schicken...
 
Du solltest so "große" Arrays nicht auf den stack legen sondern diese vom Heap reservieren (mit new oder malloc ja nach C++ oder C).
Definierst du eine Variable in main mit name[GROße Zahl] so liegt das Zeug auf dem Stack.

Der Stack sollte für sowas net misbraucht werden, weil dieser für die Zwischenspeciherung bei Funktionsaufrufen gedacht ist und meist nicht so "groß" ausgelegt ist wie der Heap
 
moin


Also bei mir geht es auch mit deutlich größeren Werten problemlos.
Hast du schonmal versucht den Speicher für "tabelle" auf den Heap zu packen?


mfg
umbrasaxum
 
Hi Ihr da draußen.

Habs jetzt endlcih geschafft. hab es so definiert:

double *L, *B, *V;
L=(double*)malloc(4282449*sizeof(double)); //3*4282449 double Elemente
B=(double*)malloc(4282449*sizeof(double));
V=(double*)malloc(4282449*sizeof(double));

Und nun läuft alles einwandfrei. Danke Euch :-)

Viele Grüße
 
Zurück