2017-11-30 2 views
-2

habe ich das Problem, dass ich einen bestimmten Typ habe ich verwenden müssen, dass wieC++ typedef int arr [x] [y] nicht in STACKDUMP Fehler

const int width=800, height=800;  
typedef int field[width][height]; 

nun definiert ist, wenn ich versuche zu machen in Instanz dieses Typs bekomme ich nur eine Ausnahme.

es einfach zu halten, sieht das Programm wie folgt aus:

const int width=800, height=800;  
    typedef int field[width][height]; 

    int main(){ 
     field f; 
    } 

Wenn ich es kompilieren und verknüpfen, every in Ordnung, aber wenn ich die progrma ich

0 [unknown (0x25D0)] test 4660 cygwin_exception::open_stackdumpfile: Dumping stack trace to test.exe.stackdump 
erhalten laufen werde
+0

Sie können die Makrokonstante verwenden, um die Breite und Höhe anstelle von const int zu definieren. – LethalProgrammer

+3

Verwenden Sie C oder C++? Warum haben Sie eine Fehlermeldung angezeigt, in der beschrieben wird, wo Sie auf einen Stack-Trace zugreifen können, aber nicht auf den Trace selbst? – Useless

+5

Die Größe dieses Arrays ist 2,44 MB, das ist wahrscheinlich zu groß für den Stapel. – mch

Antwort

0

Wahrscheinlich hat Ihr Programm keinen Speicherplatz mehr im Stack.

Entweder machen Sie die Deklaration global (verschieben Sie sie aus main() in den globalen Gültigkeitsbereich) oder finden Sie heraus, wie Sie den Ihrem Programm zugewiesenen Stack-Speicherplatz erhöhen können.

+0

Oder verwenden Sie 'new', um das Array im Heapspeicher statt im Stackspeicher zuzuordnen. –

+0

@RemyLebeau Ich würde nicht empfehlen '' '' obwohl. Ein 'std :: vector > scheint besser geeignet. – oisyn

+0

@oisyn sicher, dass das die sichere Art und Weise ist, es zu verwalten. Ändert nicht die Tatsache, dass "neu" unter der Haube verwendet wird. –

Verwandte Themen