Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841

    [c] il programma ha causato una violazione di accesso

    il debug dice:
    il programma ha causato una violazione di accesso (errore di segmentazione).


    codice:
            int coordx = buf[18]+buf[19]*256; 
            int coordy = buf[22]+buf[23]*256; 
    
                   b = fread( buf, 1, lbuffer, file); 
                   printf("file caricato nel buffer...\n"); 
                    
                   long x,y,z=0; 
                   //caricamento in array bidimensionale... 
                   unsigned char mappa[coordx][coordy][4];    
                   printf("mappa a due dimensioni creata...\n"); 
                   for(y=0; y < coordy ;y++){ 
                   for(x=0;x < coordx;x++){  
                        
                             mappa[x][y][0] = buf[z]; 
                             mappa[x][y][1] = buf[(z+1)]; 
                             mappa[x][y][2] = buf[(z+2)];                          
                             z=z+3; 
                   }} 
                   printf("byte immagazzinati nella mappa: %d \n",z); 
                      
                      
                   for(y=0; y < coordy ;y++){ 
                   for(x=0;x < coordx;x++){  
                              
                                 unsigned char *wbuf; 
                                 wbuf = new unsigned char [4]; 
                                 wbuf[0]= mappa[x][y][0]; 
                                 wbuf[1]= mappa[x][y][1]; 
                                 wbuf[2]= mappa[x][y][2]; 
                                 fwrite( wbuf, 1, 3, f_out); 
                   }}
    il programma si ferma qui:
    unsigned char mappa[coordx][coordy][4];


    grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Purtroppo, non e' possibile darti una qualsiasi indicazione perche' il problema e' a run time e dipende dal valore che assumono coordx e coordy durante l'esecuzione (il loro valore dipende da quello di alcuni elementi di buf che non si sa quanto valgono ...).

    Penso che tu stia compilando con devc++ perche' la linea

    unsigned char mappa[coordx][coordy][4];

    con coordx e coordy variabili, non sarebbe risultata corretta con altri compilatori.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    Originariamente inviato da oregon
    Purtroppo, non e' possibile darti una qualsiasi indicazione perche' il problema e' a run time e dipende dal valore che assumono coordx e coordy durante l'esecuzione (il loro valore dipende da quello di alcuni elementi di buf che non si sa quanto valgono ...).

    Penso che tu stia compilando con devc++ perche' la linea

    unsigned char mappa[coordx][coordy][4];

    con coordx e coordy variabili, non sarebbe risultata corretta con altri compilatori.
    esatto sto usando devc++...
    praticamente coordx e coordy prenderanno i valori della larghezza e dell'altezza dell'immagine caricata...
    quando prendono entrambe circa il valore 600 tutto ok...
    quando invece prendono il valore 2500 (cioè provo a lavorare con un immagine piu grande) salta tutto...
    come si puo sistemare??

    grazie mille

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il problema e' determinato dal fatto che allochi la memoria nello stack in quanto l'array e' locale.

    Devi usare l'allocazione dinamica dell'array ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    Originariamente inviato da oregon
    Il problema e' determinato dal fatto che allochi la memoria nello stack in quanto l'array e' locale.

    Devi usare l'allocazione dinamica dell'array ...
    .... cosa vorrebbe dire usare l'allocazione dinamica???

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non conosci le funzioni

    malloc

    e

    free

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    Originariamente inviato da oregon
    Non conosci le funzioni

    malloc

    e

    free

    ?
    ahhh sisi le conosco solo che non so come allocare un array tridimensionale...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Dato che nel tuo caso una delle 3 dimensioni e' costante (4), puoi scrivere

    codice:
      unsigned char **mappa[4];
      int i, j;
    
      for(j=0; j<4; j++)
      {
        mappa[j] = (unsigned char **)malloc(coordx * sizeof(unsigned char *));
    
        for(i=0; i<x; i++) 
          mappa[j][i] = (unsigned char *)malloc(coordy * sizeof(unsigned char));
      }
    e accedi alla matrice come se l'avessi dimensionata con

    codice:
      unsigned char mappa[4][coordx][coordy];
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    grazie mille, va alla perfezione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.