Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447

    [C++] Errore in Costruttore/Distruttore

    Ho un problema in fase di costruzione o distruzione di un oggetto. Il codice viene compilato senza problemi ma quando lanciato "va in errore" provocando la chiusura inaspettata dell'applicazione. Il costruttore dovrebbe creare una matrice dinamica ma per essere più chiari questo è il codice:


    codice:
    #include <iostream>
    using namespace std;
    
    enum colore{bianco=0, grigio, nero};
    
    class Canvas{
    	int m, n;
    	colore** col;
    
    	friend ostream& operator<<(ostream&, const Canvas&);
    public:
    	Canvas(int, int);
    	~Canvas();
    	//...
    };
    
    ostream& operator<<(ostream& os, const Canvas& ca){
    	for(int i=0; i<ca.n; i++)
    	{
    		for(int j=0; j<ca.m; j++)
    		{
    			if(ca.col[i][j]==0)
    				os << ". ";
    			if(ca.col[i][j]==1)
    				os << "G ";
    			if(ca.col[i][j]==2)
    				os << "N ";
    		}
    		os << endl;
    	}
    	return os;
    }				
    
    Canvas::Canvas(int i, int j){
    	m=i;
    	n=j;
    	col=new colore*[m];
    	for(int i=0; i<m; i++)
    		col[i]=new colore[n];
    	for(int i=0; i<n; i++)
    	{
    		for(int j=0; j<m; j++)
    			col[i][j]=bianco;
    	}
    	cout << "Costruttore\n";
    }			
    
    Canvas::~Canvas(){
    	for(int i=0; i<m; i++)
    		delete[] col[m];
    	delete[] col;
    	cout << "Distruttore\n";
    }	
    
    int main(){
    	Canvas c(4,6);
    	return 0;
    }
    Grazie in anticipo per l'aiuto.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Stai facendo confusione con gli indici. E anche l'operatore << ha gli indici in odine inverso.
    L'indice esterno è m ( da cui ricavi poi lo spazio per i vettori di dimensioni n)

    codice:
    Canvas::Canvas(int i, int j){
    	m=i;
    	n=j;
    	col=new colore*[m];
    	for(int i=0; i<m; i++)
    		col[i]=new colore[n];
    	for(int i=0; i<m; i++)
    	{
    		for(int j=0; j<n; j++)
    			col[i][j]=bianco;
    	}
    	cout << "Costruttore\n";
    }			
    
    Canvas::~Canvas(){
    	for(int i=0; i<n; i++)
    		delete col[i];
    
    	delete[] col;
    	cout << "Distruttore\n";
    }

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.