Speicherfehler, wenn Klasse zu groß?



  • Gegeben ist

    const int x = 5;
    const int y = 5;
    const int n = 4;
    const int nwp = 4*x*y - 3*x*n - 3*y*n + 3*x + 3*y - 4*n + 2*n*n + 2;
    
    class Foo {
    public:
        int p;
        int f[x][x];
        int np;
        int sc[2][nwp];
        bool wp[x][y][nwp];
    
        CArray<Bar*> em;
    };
    

    Sobald x jetzt 6 wird, kommt ein Speicherfehler (eine Instanz dieser Klasse wird in CDialog::OnInitInstance erzeugt, der Fehler tritt aber außerhalb der Funktion auf). Mit x==5 funktioniert alles.
    Wieso?

    EDIT:
    wenn die Größe der Klasse

    4* (1 + x*y + 1 + 2*nwp + x*y*nwp + 12)
    

    Bytes ist, dann ergibt sich für

    x = 6; y = 5; n = 4;
    size == 5168
    

    , für x=5 nur 3180 Bytes! Vielleicht liegt es daran, dass der MFC-Speichermanager nur Klassen <1kB verwalten kann? (d.h. ich muss einen Zeiger auf wp statt wp selbst speichern?)

    [ Dieser Beitrag wurde am 06.04.2003 um 18:11 Uhr von Norondion editiert. ]



  • vielleicht stack overflow? erstell die instanz mal per new



  • wird mit bereits new erstellt



  • 1.) Was hat der Speichermanager mit den MFC zu tun?
    2.) Das kann man aber bestimmt irgendwo umstellen...



  • zu 1.): Mit der MFC werden new und delete anders definiert als ohne, glaube ich



  • Original erstellt von Norondion:
    zu 1.): Mit der MFC werden new und delete anders definiert als ohne, glaube ich

    Also in den MFC steht nix von new und delete. Meinst sicher den MSVC


Anmelden zum Antworten