Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20

Discussione: [C++] new e delete

  1. #1

    [C++] new e delete

    Salve a tutti,
    volevo chiedervi un aiutino :-)

    height = numero righe file
    weight = numero colonne file

    Ogni agente deve avere un numero di features pari al numero di colonne
    lette nel file(width)
    Per ogni riga letta viene creato un agente e per ogni agente vorrei che vengano assegnate
    alle features i numeri di colonna.

    codice:
    float *features; // dichiarata nella classe Agente
    matrice = (float*)malloc(sizeof(*matrice)*width*height);
    
    
    for (int i=0; i<height; i++)  		
    {
     	Mio* agente = new Agente ();
     	agente->features = new float[width];
    	for(int j=0; j<width; j++)
    	{ 				
                   boid->features[j] = matrice[i*width+j];  			
            } 			
            boid->id = id; 			
            id++; 			
            delete[] boid->features; 		
    }
    	free(matrice);
    Per ogni agente vorrei allocare la memoria necessaria alle features in base al numero di colonne e una volta fatto questo vorrei assegnare alle features il valore presente nelle colonne.Non riesco a capire dov'è l'errore
    Grazie :-(

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Quale errore?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Alla riga : boid->features[j] = matrice[i*width+j];

    Eccezione non gestita a 0x00406c67 :
    0xC0000005: Violazione di accesso nella scrittura del percorso 0xbaadf00d

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    E se porti il delete di bold fuori dal ciclo?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Facendo così come mi hai suggerito non ho errori pero il file che seleziono
    ha 802 righe e 6 colonne...A me viene creato un solo agente con una sola feature : 0.0

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non si capisce cosa faccia quel codice. Allochi agente, alla sua variabile features assegni un array di float, poi usi boid, che non si sa ne quando venga creato ne a cosa serva, e infine deallochi boidall'interno di un ciclo.
    E corretto così o hai fatto (tanta) confusione?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    boid e agente sono la stessa cosa scusa.

    Per ogni riga creo un agente e ad ogni feature dell'agente voglio assegnare il valore delle colonne
    codice:
    		
    
    for (int i=0; i<height; i++)  		
    { 			
           Mio* agente = new Mio ();
           agente->feature = new float[width]; 			
           for(int j=0; j<width; j++) 			
           { 				
                  agente->feature[j] = matrice[i*width+j];  			
           } 			
           agente->id = id; 			
           id++; 			
           delete[] agente->feature; 		
    } 		
    free(matrice);

  8. #8
    Ho provato a fare il debug.
    Sembra che i miei agenti sono formati da una sola feature, gli viene assegnata solo la prima.
    Ad esempio ho un file con 6 righe e 5 colonne: riesco ad ottenere 6 agenti che però hanno solo
    la prima feature che corrisponde al primo valore di ogni colonna.

  9. #9
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Veramente hai sei agenti (più sei memory leak visto che agente è locale al primo ciclo for e non lo assegni a niente altro ne lo deallochi) e 0 colonne visto che deallochi continuamente features. Solo id sopravvive.

    codice:
    for (int i=0; i<height; i++)  		
    { 			
           Mio* agente = new Mio (); // qui allochi un agente.
           agente->feature = new float[width]; // qui allochi le features 		 	
           for(int j=0; j<width; j++) 			
           { 				
                  agente->feature[j] = matrice[i*width+j];  // qui copi la matrice nelle features			
           } 			
           agente->id = id; 			
           id++; 			
           delete[] agente->feature; // qui deallochi e perdi le features dell'agente.
          // qui perdi pure l'agente allocato. 		
    } 
    // qui hai un pugno di mosche.
    Il codice è inserito in una funzione per caso?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  10. #10
    Il codice è inserito all'interno di un metodo che apre il file,
    legge righe e colonne del file e dovrebbe assegnare ad ogni agente (la riga del file), i valori delle colonne nelle features.
    Forse ho capito dove sta l'errore,le features le assegna perfettamente.

    Nel metodo dove faccio visualizzare le features definisco in questo modo il numero di colonne del file(che corrispondono al numero di feature allocate per l'agente):

    int width = (sizeof(agente->feature)/(sizeof(agente->feature[0]));

    Va bene? Se metto ad esempio il numero esatto di colonne di un file che decido di aprire, ad esempio 6 ,le features vengono visualizzate correttamente.
    Forse sbaglio questa istruzione?

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.