C statische Arrays - Speicherlimit? [gelöst]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
jaywalker
Beiträge: 371
Registriert: 14.09.2006 12:13:19

C statische Arrays - Speicherlimit? [gelöst]

Beitrag von jaywalker » 19.12.2006 17:58:13

Hallo,

warum funktioniert folgendes C-Programm nicht??
Ich übersetze es fehlerfrei mit gcc -g -o datei datei.c, es gibt aber einen
Segfault bei der Zuweisung test[1][1] = 0.
Setze ich -fstack-check, kommt der Fehler bei der Zeile int test[1521][1521].
Der Array ist gerade mal ein bißchen größer als 2MB.
Warum kann ich das nicht initialisieren, und was muß ich tun, daß es doch geht?

Grüße und vielen Dank
Heiner


Das Programm:

#include <stdio.h>
int main()
{
int test[1521][1521];
test[1][1] = 0;
return 0;
}
Zuletzt geändert von jaywalker am 19.12.2006 18:07:45, insgesamt 1-mal geändert.

jaywalker
Beiträge: 371
Registriert: 14.09.2006 12:13:19

Beitrag von jaywalker » 19.12.2006 18:07:19

10 Minuten nach posten des Threads kam mir die Lösung: Man muß die Stack-Grenze heraufsetzen. Das geht in der bash mit
ulimit -s unlimited
und in tcsh mit
limit stacksize unlimited

Das unlimited kann man jeweils durch ein festes Limit ersetzen. Dann geht's...

Grüße
Heiner

Benutzeravatar
devilx
Beiträge: 734
Registriert: 26.08.2003 22:57:20
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Filderstadt
Kontaktdaten:

Beitrag von devilx » 19.12.2006 18:15:30

Darf man Fragen wozu man bei der Programmierung eines /normalen/ Programms so "viel" Stapelspeicher brauchen sollte?
When you smile, the world smiles with you :)
When you fart, you stand alone :(
... a place full of dorkness

jaywalker
Beiträge: 371
Registriert: 14.09.2006 12:13:19

Beitrag von jaywalker » 20.12.2006 16:50:59

Steht doch oben: Um statische arrays anzulegen. Die kommen nämlich in den Stack, und wenn der zu klein ist, gibt es eben einen Segfault.
Ich hätte das nicht so programmiert, sondern malloc und free benutzt, aber gelegentlich kommt man eben mal in die Situation, Programme anderer Leute auf dem eigenen Rechner ausführen zu müssen, und da ist "alles neu programmieren" einfach keine Lösung.

Grüße
Heiner

Antworten