PDA

Visualizza la versione completa : [c++]Violazione di accesso nella lettura del percorso


cerza
30-06-2011, 13:31
salve a tutti,
la mia applicazione mi da l'eccezione riportata nell'oggetto e non riesco a capire il perchè, magari posto un pò di codice così riesco ad essere più chiara
ho dichiarato il seguente array



const char *texCubeFaces[3] = {"pippo.jpg", "pluto.jpg",
"paperino.bmp"};




che viene richiamato nella funzione seguente


int Cartone::loadCubeTexture(const char **texCubeFaces){
....
for(int i = 0; i < 3; i++)
{
// Otteniamo il formato dell'immagine
FREE_IMAGE_FORMAT fifmt = FreeImage_GetFileType(texCubeFaces[i], 0);
// Carichiamo l'immagine
FIBITMAP *dib = FreeImage_Load(fifmt, texCubeFaces[i], 0);
// L'immagine è convertita nel formato GL_RGB
dib = FreeImage_ConvertTo24Bits(dib);
....
}

ma si verifica l'eccezione quando entro nel for e se eseguo in debug posizionandomi si texCubeFaces[i] mi si dice puntatore non valido ma non riesco a capire il perchè in quanto mi sembra tutto inizializzato!!! :dhò:

grazie a tutti per la disponibilità

maria

oregon
30-06-2011, 13:38
Dipende da come chiami la funzione membro e da cosa fai prima della for ...

cerza
30-06-2011, 14:51
allora la funzione membro viene richiamata nel costruttore in questo modo:


Cartone::Cartone(){
idTexturesCartone = loadCubeTexture(texCubeMap);
}


e nel for deve solo caricare le varie immagini solo che si blocca prima di fare ciò....

oregon
30-06-2011, 19:04
Originariamente inviato da cerza
allora la funzione membro viene richiamata nel costruttore in questo modo:


Cartone::Cartone(){
idTexturesCartone = loadCubeTexture(texCubeMap);
}



E texCubeMap?

cerza
01-07-2011, 08:44
scusami erano sempre le solite prove... praticamente quel texCubeMap è texCubeFaces gli avevo solo cambiato nome.
grazie per l'aiuto

oregon
01-07-2011, 10:08
Nel codice



int Cartone::loadCubeTexture(const char **texCubeFaces){
.... <---- ?
for(int i = 0; i < 3; i++)
{
// Otteniamo il formato dell'immagine
FREE_IMAGE_FORMAT fifmt = FreeImage_GetFileType(texCubeFaces[i], 0);
// Carichiamo l'immagine
FIBITMAP *dib = FreeImage_Load(fifmt, texCubeFaces[i], 0);
// L'immagine è convertita nel formato GL_RGB
dib = FreeImage_ConvertTo24Bits(dib);
....
}

cosa c'è al posto dei primi puntini, dove ho messo il ?

cerza
01-07-2011, 11:02
ciao dove ci sono ..... c'è del codic eche non richiamana neanche lontamente il puntatore texCubeFaces!

oregon
01-07-2011, 13:26
Originariamente inviato da cerza
... neanche lontamente il puntatore texCubeFaces!

Questo lo pensi tu, ma potrebbe influire ... se ce lo mostri ...

cerza
01-07-2011, 17:27
ho risolto, grazie.
non dipendeva dalla funzione ma da come venivano richiamate le texture!

oregon
01-07-2011, 17:32
Come ti dicevo, ci sono tante cose che possono influire ... basta sbagliare qualcosa e "sporcare" la memoria che segue in cui ci sono valori che in seguito non trovi più ...

Quando ci sono problemi di questo genere, vanno fornite tutte le indicazioni del caso, anche quelle che si ritengono poco utili ...

Loading