|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
|
[C++]Crash a causa di un for
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. Codice:
#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(); } |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
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.
Codice:
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 } } |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2006
Città: dietro di te!
Messaggi: 340
|
Hai perfettamente ragione.
Vengo dal Java e queste cose specifiche non le so ![]() Comunque devo inizializzare anche il char * nome, altrimenti crasha lo stesso. Certo passare da un java super user friendly al c++ è traumatizzante ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
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...
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:16.