Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563

    C++ - Controllo di un puntatore

    Salve.
    In Direct3D ho bisogno di caricare una mesh e appicargli una texture.

    Ora però se la mesh è effettivamente settata per una texture, allora
    codice:
    d3dxMaterials[i].pTextureFilename
    sarà il puntatore a char che avrà la texture.
    Ma se la mesh non ha una sua texture predefinita, il puntatore non è valido, quindi mi da errore e crasha tutto.
    Come posso verificare se il puntatore è valido o no? Ho provat a fare
    codice:
    if (d3dxMaterials[i].pTextureFilename != NULL)
    prima del blocco di codice, ma non sembra funzionare..
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quando quel puntatore non e' valido, chi lo azzera ?

    Da dove proviene il puntatore ?

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    codice:
    void VGngineMesh::CreaMesh(const char *MeshFile,VGngineDevice *Device)
    	{
    		
    		LPD3DXBUFFER MeshBuffer;
    		if(FAILED(D3DXLoadMeshFromX(MeshFile,D3DXMESH_MANAGED, (LPDIRECT3DDEVICE9)Device->GetDevice(),NULL,&MeshBuffer,
    							NULL,&NumMateriali,&g_pMesh)))
    			{
    				MessageBox(NULL,"Eh non ha caricato bene","Ciao",MB_OK);
    			}
    	D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)MeshBuffer->GetBufferPointer();
    	g_pMatMesh = new D3DMATERIAL9[NumMateriali];
    	g_pTexMesh = new LPDIRECT3DTEXTURE9[NumMateriali];
    
    		for (DWORD i = 0; i < NumMateriali; i++)
    	{
    			g_pMatMesh[i] = d3dxMaterials[i].MatD3D;
    			g_pMatMesh[i].Ambient = g_pMatMesh[i].Diffuse;
    
    		if(D3DXCreateTextureFromFile( (LPDIRECT3DDEVICE9)Device->GetDevice(),d3dxMaterials[i].pTextureFilename,
    //Puntatore non valido										&g_pTexMesh[i]) != D3D_OK)
    			{
    					MessageBox(0,"La texture non è stata caricata","muori",MB_OK);
    			}
    	}
    
    	MeshBuffer->Release();
    	
    	}
    Questo è il codice incriminato, che proviene da un mio progetto lib per facilitarmi l'uso delle directx9
    Da come si può notare il puntatore d3dxmaterial viene dato in automatico dalla funzione, quindi dovrebbe essere valido
    Il puntatore che da errore è
    pTextureFilename, che è un char *.
    Ora se la mesh è preimpostata per avere una texture, il char * restutisce il nome della texture, altrimenti mi da ecc. non gestita, in quanto, se passo col mouse su ptexturefilename (visual studio 2003) mi dice ptr. non valido
    Ho provato anche a fare if d3dxmaterials[i].ptexturefilename == NULL ma a quanto pare il puntatore non è null...
    Come risolvere?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    up
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ho risolto.
    Per un mio errore invece di
    codice:
    == NULL
    avevo scritto == NUL che stranamente è definito a 3120989 in un toolkit che avevo incluso, e quindi dava erorre
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La prossima volta, invece di scrivere

    codice:
    if (d3dxMaterials[i].pTextureFilename != NULL)
    scrivi

    codice:
    if (d3dxMaterials[i].pTextureFilename)
    e vai sul sicuro

  7. #7
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ma come funzionano queste cose sottointese? Utilizzano gli overloading degli operatori?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Niente di tutto cio' e niente di sottointeso.

    In C una espressione viene valutata come vera se diversa da zero, falsa se 0.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.