[C++] Errore deallocazione

di il
8 risposte

[C++] Errore deallocazione

Salve, ho un problema. Sembra essere un errore di deallocazione poichè l'array World mi funziona per tutto il programma, ma alla fine il programma prima di chiudersi si blocca. Ecco il codice:

InitGame():
HRESULT InitGame(void) {
    static int i, j, k;
    static MSG msg;
    static long lTime;
    static D3DMATERIAL9 Mtrl;

    srand(time(NULL));

    ZeroMemory(&Mtrl, sizeof(D3DATERIAL9));
    ZeroMemory(&msg, sizeof(msg));

    Mtrl.Ambient.r = Mtrl.Diffuse.r = 1.0f;
    Mtrl.Ambient.g = Mtrl.Diffuse.g = 1.0f;
    Mtrl.Ambient.b = Mtrl.Diffuse.b = 1.0f;

    pD3DD -> SetMaterial(&Mtrl);

    pD3DD -> SetRenderState(D3DRS_LIGHTING, TRUE);
    pD3DD -> SetRenderState(D3DRS_AMBIENT, 0x00080808);
    pD3DD -> SetRenderState(D3DRS_FOGENABLE, FALSE);

    State = S_LOADING;
    FPS = 30;
    lTime = clock();

    xTransCamera = (float)xd / 2.0f;
    zTransCamera = (float)zd / 2.0f;

    // BEGIN ENGINE

    if (IfFirstTime == TRUE) {
        if (FAILED(InitMesh())) return E_FAIL;
        World = new WORLD**[xd];
        for (i = 0; i < xd; i++) {
            World[i] = new WORLD*[yd];
            for (j = 0; j < yd; j++) {
                if (clock() >= lTime + (long)(1000.0f / 30.0f)) {
                    if (FAILED(DrawD3DScene())) return E_FAIL;
                    lTime = clock();

                    SetupKeys();

                    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);

                        if (msg.message == WM_QUIT) {
                            PostQuitMessage(0);
                            return S_OK;
                        }
                    }
                }
                World[i][j] = new WORLD[zd];
            }
        }
        IfFirstTime = FALSE;
    }

    /*

        Ecc...

    */
    return S_OK;
}
KillD3DWindow():
HRESULT KillD3DWindow(HWND hWnd) {
    static int i, j;

    for (i = 0; i < xd; i++) {
        for (j = 0; j < yd; j++) {
            delete[] World[i][j];
        }
        delete[] World[i];
    }
    delete[] World;

    /*

        Ecc...

    */

    return S_OK;
}
WORLD è una struct formata da due BYTE (Value e Options). xd, yd e zd sono le dimensioni impostate del mondo (xd = zd = 200, yd = 50). pD3DD è il device Direct3D (che non vi interessa). State è lo stato del gioco (usato in DrawD3DScene()). FPS sono i FPS. xTransCamera, yTransCamera e zTransCamera sono la posizione della telecamera. IfFirstTime è una variabile che non vi interessa. World è l'array di WORLD con dimensioni xd, yd e zd, dove riscontro il problema.

Debug:
0 - 7C911231 - ntdll!DbgUiConnectToDbg() - C:\WINDOWS\sy... -
1 - 7C97C943 - ntdll!RtlpNtMakeTemporaryKey() - C:\WINDOWS\sy... -
2 - 7C96DB9C - ntdll!RtlZeroHeap() - C:\WINDOWS\sy... -
3 - 00000000 - 0x093aafa0 in ??() -  -
4 - 00000000 - 0x093aafa0 in ??() -  -
5 - 00000000 - 0x003f0000 in ??() -  -
6 - 00000000 - 0x093aafa0 in ??() -  -
7 - 00000000 - 0x0022fbd4 in ??() -  -
8 - 7C97CD11 - ntdll!RtlpNtMakeTemporaryKey() - C:\WINDOWS\sy... -
Qualche suggerimento?

8 Risposte

  • Re: [C++] Errore deallocazione

    PS: Il debug non mi segna nessuna linea e per questo che ho chiesto qui.
  • Re: [C++] Errore deallocazione

    :'(
  • Re: [C++] Errore deallocazione

    Mi spiace ma non so aiutarti questo è il problema di chi è molto bravo a programmare xD ovvero trovare qualcuno abbastanza bravo da risolvere i problemi che incontri xD

    off ps: prima di programmare fai l'algoritmo del programma su carta!?!
  • Re: [C++] Errore deallocazione

    Ho capito il problema! Da un po' di tempo ho questo problema: http://www.iprogrammatori.it/forum-programmazione/microsoft-windows/problemi-salvataggio-dati-t11956.html quindi non posso neanche allocare memoria forse... ma quando la creo funziona... bho magari lo provo su un altro computer.
  • Re: [C++] Errore deallocazione

    No l'errore rimane anche nel computer di mia sorella ed inoltre ho usato una vector ma l'errore persiste... quindi è la deallocazione di qualcos'altro... vedo adesso
  • Re: [C++] Errore deallocazione

    Al momento dell'errore vedi il callStack del debugger. Se non ci sono chiamate riferito al tuo codice metti dei breakpoint nei distruttori e controlla i passaggi una riga alla volta.
  • Re: [C++] Errore deallocazione

    Ok...
  • Re: [C++] Errore deallocazione

    Problema non e in deallocazione del 'World'. Gli pointers dell 'World' sono statti daneggiati da sovrascrittura dei dati perche te, o hai scritto negli variabili che sono gia deallocati; o problema e che la scrittura e eseguita nel qualche array che non e sufficentamente grande.
Devi accedere o registrarti per scrivere nel forum
8 risposte