PDA

Visualizza la versione completa : [c++] matrice di ogetti


namelessg
01-11-2014, 14:55
ciao a tutti

devo allocare dinamicamente una matrice di ogetti della classe kakuro

mi chiedevo se cosi è allocata in modo giusto






cout<<"Inserire numero di righe:";
int row; cin>>row;
cout<<"Inserire numero di colonne:";
int col; cin>>col;


Kakuro **Celle;

//alloco la matrice dinamicamente
Celle= new Kakuro*[row];
for(int i=0;i<row;i++)
Celle[i] = new Kakuro[col];



perchè durante l'esecuzione del programma all'improvviso crasha il programma,
e non riesco a trovare l'errore allora ho pensato che forse ho sbagliato ad allocare ?

oregon
01-11-2014, 15:08
perchè durante l'esecuzione del programma all'improvviso crasha il programma,
e non riesco a trovare l'errore allora ho pensato che forse ho sbagliato ad allocare ?

In quale altra parte del codice hai l'errore ?

namelessg
01-11-2014, 15:12
No non lo so di preciso XK la compilazione va a buon fine
E in fase di esecuzione che crasha il programma

Allora perciò mi chiedevo se l allocazione in questo modo è giusta?

oregon
01-11-2014, 16:28
Sì ... mostra il resto e si vede ...

namelessg
01-11-2014, 17:17
bene il mistero si infittisce :dhò:

Allora siccome il codice è molto lungo pubblicherò solo le cose piu importanti

sto implementando il gioco enigmistico kakuro in c++


Ho 3 matrici

string tabella, che mi rappresenta la griglia di gioco
Kakuro Celle, che mi serve per analizzare la griglia di gioco
Kakuro temp, una matrice temporanea


il problema nasce perchè devo fare in modo che l'input sia preso da tastiera mentre invece prima era implementato in modo statico, cosi ho fatto queste modifiche al codice ma crasha.


PRIMA DELLE MODIFICHE


avevo dei define che stabilivano la grandezza della matrice


#define ROW 8
#define COL 8

in questa classe dichiaravo la matrice Celle


class Tabella{
private:
Kakuro Celle[ROW][COL];

.............



Nel main avevo dichiarato la matrice string tabella in modo statico




string tabella[ROW][COL]={{"N","23-","30-","N","N","27-","12-","16-"}, ///8x8
{"-16"," "," ","N","17-24"," "," "," "},
{"-17",...................



in questo metodo la matrice temp



bool Tabella:: backtracking(int i, int j){
vector<int> val;
Kakuro temp[ROW][COL];


e il programma funzionava e restituiva la soluzione

MODIFICHE SUCCESSIVE PER PRENDERE LA GRIGLIA DA TASTIERA

dichiaro la matrice Celle in modo dinamico



class Tabella{
private:

int row;
int col;
Kakuro **Celle;
..............




Alloco nel main la matrice tabella


string **tabella;

cout<<"Inserire numero di righe:";
int row; cin>>row;
cout<<"Inserire numero di colonne:";
int col; cin>>col;


//alloco la matrice dinamicamente
tabella= new string*[row];
for(int i=0;i<row;i++)
tabella[i] = new string[col];

//leggo da tastiera i valori della matrice
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
{
cout<<"KAKURO[ "<<i+1<<","<<j+1<<" ] = ";
cin>>tabella [i][j];
}// fine leggi mat




poi sempre nel main

passo al costruttore row e col


Tabella Tab(row,col);


e il costruttore di Tabella costruisce Celle


Tabella::Tabella(int r,int c){

row=r;
col=c;

//alloco la matrice dinamicamente
Celle= new Kakuro*[row];
for(int i=0;i<row;i++)
Celle[i] = new Kakuro[col];





e la matrice temp in questo metodo l'ho lasciata statica



bool Tabella:: backtracking(int i, int j){
vector<int> val;
Kakuro temp[row][col];

namelessg
01-11-2014, 17:23
l'input lo prende
dopo aver caricato la matrice tabella crasha il programma

namelessg
01-11-2014, 18:10
no ma il il problema non è questo
perchè ora mettendo delle cout ho capito che il programma

si blocca in questo metodo


void Tabella:: set_definizioni(){

int i,j;
int n_celle=0,jj=0;
for(i=0;i<row;i++){ //scorro la tabella per righe
for(j=0;j<col;j++){
jj=j; //salvo la posizione
while(Celle[i][j].compare(BIANCA)==true and j<col){//quando trovo una cella bianca continuo a contare finchè
n_celle++;//c'è non finiscono
j++;
}
if(n_celle!=0)//se ne ho trovate
Celle[i][jj-1].set_right_celle(n_celle);//salvo il totale nella casella definizione
n_celle=0;//e azzero il contatore
}
}
n_celle=0;
int ii=0;
for(j=0;j<col;j++){//scorro la tabella per colonne
for(i=0;i<row;i++){
ii=i; //salvo la posizione
while((Celle[i][j].compare(BIANCA)==true) and (i<row)){//appena trovo una cella bianca
n_celle++;//conto finchè non finiscono
i++;
}
if(n_celle!=0)//se ne ho trovate
Celle[ii-1][j].set_down_celle(n_celle);//stampo il totale nella casella definizione
n_celle=0;
}
}
+
}


forse non riesce a fare piu i confronti con la matrice presa da input

Loading