PDA

Visualizza la versione completa : [C++] programma in crash!


elevation
28-11-2002, 14:43
ciao a tutti,
ho creato questo semplice algoritmo che permetta all'utente di caricare due
distinti vettori di interi e, con essi, ne costruisce un terzo le cui
componenti sono uguali a quelle dei due vettori intervallati tra loro, ad
esempio:

Input:
Primo vettore: 1 4 3 7 6
Secondo Vettore: 5 4 8 6 3 4 4

Output:
Terzo vettore: 1 5 4 4 3 8 7 6 6 3 4 4

Il programma compila ma va in crash al momento di eseguire il ciclo che
copia i valori nel terzo vettore :-(( ecco il codice:



#include <iostream>
#include <string>
int main(int argc, char *argv[])
{ const int n=6 ;
const int m=7;
const int l=13;

int i, veta[n], j;
int vetb[m];
int h,vetc[l];
cout<<"Inserire i valori di vet1\n";
for (i=0; i<n; i++)
{
cout<<"veta["<<i<<"]:";
cin>>veta[i];
}
cout<<"inserire i valori di vet2\n";
for (j=0; j<m; j++)
{
cout<<"vet2["<<j<<"]:";
cin>> vetb[j];
}
for (i=0; i<n; i++)
{
vetc[h]=veta[i];
h=h+2;
}
for (j=1; j<m; j++)
{
vetc[h]=vetb[j];
h=h+2;
}
for (h=0; h<l; h++)
{
cout<<"\nvet3["<<h<<"]:"<<vetc[h];
}
system("PAUSE");
return 0;
}

elevation
28-11-2002, 16:31
up!

Johnny_Depp
28-11-2002, 17:37
controlla vetb c'è un errore di sistassi (distrazione)
nel ciclo for... vet2 dove lo prendi????

elevation
28-11-2002, 18:44
ok...ma quello è ininfluente...è solo un output...:(

Johnny_Depp
28-11-2002, 19:18
Si infatti hai ragine tu!! :gren:

CMQ non è logico il ciclo che si "sposta di 2"
tra i campi dell'arrayC

lorenzo-dsy
28-11-2002, 19:24
Inizializza h a 0 prima del ciclo


for (i=0; i<n; i++)
{
vetc[h]=veta[i];
h=h+2;
}


e ri-inizializza h a 1 prima del ciclo


for (j=1; j<m; j++)
{
vetc[h]=vetb[j];
h=h+2;
}

(dove, tra l'altro, j dovrebbe essere inizializzato a 0, non a 1)

elevation
28-11-2002, 21:15
Originariamente inviato da Johnny_Depp
Si infatti hai ragine tu!! :gren:

CMQ non è logico il ciclo che si "sposta di 2"
tra i campi dell'arrayC

come non è logico??? :master:

elevation
28-11-2002, 21:16
Originariamente inviato da lorenzo-dsy
Inizializza h a 0 prima del ciclo


for (i=0; i<n; i++)
{
vetc[h]=veta[i];
h=h+2;
}


e ri-inizializza h a 1 prima del ciclo


for (j=1; j<m; j++)
{
vetc[h]=vetb[j];
h=h+2;
}

(dove, tra l'altro, j dovrebbe essere inizializzato a 0, non a 1)

Grazie mille!!!! Funziona!!! Come mai però andava in crash???

:ciauz:

lorenzo-dsy
29-11-2002, 17:48
Originariamente inviato da elevation
Come mai però andava in crash???


Quando dichiari una variabile in c/c++, questa non viene inizializzata a un valore di default come accade per altri linguaggi.
Quindi, finché non le assegni un valore tu, la variabile può assumerne uno qualsiasi.

Al momento dell'esecuzione di "vetc[h]" h non aveva alcun valore sensato, quindi il programma cercava di accedere a una posizione del vettore che non esiste, generando un errore.

Il fatto che poi il programma andasse in crash dipende dal sistema operativo, e da come gestisce la memoria.

elevation
29-11-2002, 21:02
capito. Si in effetti lavoro su XP creando delle console application con DEV C++...

ciao e grazie ancora!

:ciauz:

Loading