Dynamisches Array will nicht



  • Hey!

    Warum funktioniert das:

    struct Model:

    TVertex v[8];
    	WORD i[18];
    
    model.v[0].position = D3DXVECTOR3(-1.5f, 0.5f, 0.0f);
        ...
        model.i[0] = 0;
        ...
    
    	direct3DDevice->CreateVertexBuffer(8 * sizeof(Model::TVertex), D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, &model.D3D_VertexBuffer, NULL); 
    
        VOID *pVertex; 
        model.D3D_VertexBuffer->Lock(0, sizeof(model.v), (VOID**)&pVertex, 0); 
        memcpy(pVertex, model.v, sizeof(model.v)); 
        model.D3D_VertexBuffer->Unlock();
    
    	direct3DDevice->CreateIndexBuffer(sizeof(*model.i), 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &model.m_pIB, NULL);
    
    	WORD *pIndices = NULL;
        model.m_pIB->Lock(0, sizeof(*model.i), (void**)&pIndices, 0);
        memcpy(pIndices, model.i, sizeof(*model.i));
        model.m_pIB->Unlock();
    

    Und das nicht:

    struct Model:

    TVertex* v;
    	WORD* i;
    
    model.v = new Model::TVertex[8];
    	model.i = new WORD[18];
    
        model.v[0].position = D3DXVECTOR3(-1.5f, 0.5f, 0.0f);
        ...
        model.i[0] = 0;
        ...
    
    	direct3DDevice->CreateVertexBuffer(8 * sizeof(Model::TVertex), D3DUSAGE_WRITEONLY, 0, D3DPOOL_DEFAULT, &model.D3D_VertexBuffer, NULL); 
    
        VOID *pVertex; 
        model.D3D_VertexBuffer->Lock(0, sizeof(model.v), (VOID**)&pVertex, 0); 
        memcpy(pVertex, model.v, sizeof(*model.v)); 
        model.D3D_VertexBuffer->Unlock();
    
    	direct3DDevice->CreateIndexBuffer(sizeof(model.i), 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &model.m_pIB, NULL);
    
    	WORD *pIndices = NULL;
        model.m_pIB->Lock(0, sizeof(*model.i), (void**)&pIndices, 0);
        memcpy(pIndices, model.i, sizeof(model.i));
        model.m_pIB->Unlock();
    

    ? Bei Letzterem wird einfach nichts gezeichnet 😞

    MfG



  • ceplusplus schrieb:

    sizeof(model.v) /* ... */
    sizeof(*model.v)); /* ... */
    sizeof(model.i), /* ... */
    sizeof(*model.i) /* ... */
    sizeof(model.i));
    

    Ist alles verkehrt!
    Mit sizeof(Zeiger) kriegst du niemals die Größe des Speicherbereichs, der sich hinter dem Zeiger "versteckt"! sizeof(Zeiger) liefert einfach nur die Größe eines Zeigers, was bei dir vermutlich 32 Bits sind, also 4 Bytes.

    Richtig wäre das hier:

    8 * sizeof(Model::TVertex)
    18 * sizeof(WORD)
    


  • Achsooo, nun verstehe ich.
    Dankesehr!

    MfG


Anmelden zum Antworten