PDA

View Full Version : [C++]Crash a causa di un for


Killer Application
03-01-2011, 14:14
Ad un mio "studente" ho fatto realizzare un elenco telefonico con ricerca integrata.
Dato un nome, restituisce tutti i numeri di telefono ad esso collegati.

(è solo l'inizio, poi ci aggiungo altre cose)

Ma ho notato che il software crasha irreparabilmente all'interno del for della funzione cerca.
Se tolgo il for e lo sostituisco con una serie di If tutto è perfetto.

Lo compilo con dev-c++, che usa gcc se non ricordo male.

#include<iostream.h>
#include<conio.h>
void cerca( char * matrix[10][3],char * nome){
int j,i;
for(j=0;j<10;j++){
if(strcmp(nome, matrix[j][0])==0){
cout<<"il numero di telefono e'"<<matrix[j][2];
}
}




}

main()
{
char * matrix[10][3];
char * nome;
int i,j;


matrix[0][0]="Nome";
matrix[0][1]="Cognome";
matrix[0][2]="Numero di Telefono";
matrix[1][0]="Abaco";
matrix[1][1]="Truccato";
matrix[1][2]="0578198877";
matrix[2][0]="Abenzio";
matrix[2][1]="Gatti";
matrix[2][2]="0578400033 ";
matrix[3][0]="Abele";
matrix[3][1]="Lamborghini";
matrix[3][2]="0578948732";
matrix[4][0]="Abelardo";
matrix[4][1]="Luttarini";
matrix[4][2]="0578552522";
matrix[5][0]="Alda";
matrix[5][1]="Galletti";
matrix[5][2]="0578239199";
matrix[6][0]="Adeodato";
matrix[6][1]="Baldi";
matrix[6][2]="0578816437";
matrix[7][0]="Ercolano";
matrix[7][1]="Baronio";
matrix[7][2]="057816211";
matrix[8][0]="Caio";
matrix[8][1]="Bartoletti";
matrix[8][2]="0578750108";
matrix[9][0]="Cornelio";
matrix[9][1]="Savelli";
matrix[9][2]="0578202685";


cout<<"di quale persona vuoi cercare il numero di telefono?";
cin>>nome;
cout<<nome<<endl;
cerca(matrix,nome);



for(j=0;j<10;j++){
for(i=0;i<3;i++){
cout<<matrix[j][i]<<" ";
}
cout<<"\n";

}
getch();
}

Supdario
03-01-2011, 14:42
Hai assegnato un valore arbitario ai char * senza prima allocare dinamicamente la variabile: prima di assegnare tutti i valori dovresti usare malloc su tutte le dimensioni del vettore.

for(i=0; i<10; i++)
{
for(j=0; j<3; j++)
{
matrix[i][j] = (char *) malloc(sizeof(char)*256); //256 è la lunghezza massima della stringa
}
}

Killer Application
03-01-2011, 14:55
Hai perfettamente ragione.

Vengo dal Java e queste cose specifiche non le so:D

Comunque devo inizializzare anche il char * nome, altrimenti crasha lo stesso.


Certo passare da un java super user friendly al c++ è traumatizzante:D

tomminno
03-01-2011, 15:26
Certo passare da un java super user friendly al c++ è traumatizzante:D

Se usassi (o insegnassi) new, vector e string al posto di malloc e char* vedrai che sarebbe molto meno traumatizzante. Del C++ stai usando (o meglio stai facendo usare) solo cout e cin...