• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto Programma c++ con vettori crasha

Stato
Discussione chiusa ad ulteriori risposte.

raffy2010

Utente Normale
Autore del topic
11 Settembre 2012
76
42
Miglior risposta
0
Salve ragazzi :emoji_slight_smile:
Sono un neofita di c++ e della programmazione in generale e sto studiando i vettori. Per essere sintetico, a scuola ho scritto un programma che funziona perfettamente sul pc scolastico ma quando provo a compilarlo e ad eseguirlo a casa crasha.

Qual è il problema?
Per i più esperti, avete qualche consiglio da dare a un principiante?
Grazie in anticipo :emoji_smiley:

#include<cstdlib>
#include<iostream>
using namespace std;
/*///=======================================================
Nome:Esercizio base sui vettori
Autore:
Data:

Descrizione:
*///========================================================
void a_capo(int num){
int ciclo;
for(ciclo=0;ciclo<=num;ciclo++)
cout<<endl;
}


main()
{

int dim,ciclo,pos,cerca;
int vett[dim];
bool esiste;
//=========================================================
//Inserimento vettore
//=========================================================

cout<<"Inserisci la dimensione del vettore => ";
cin>>dim;
a_capo(2);


for(ciclo=0;ciclo<dim;ciclo++){
cout<<"Inserisci un numero nel vettore => ";
cin>>vett[ciclo];}

//=========================================================
//Stampa l'elemento alla posizione x
//=========================================================

do{

a_capo(2);
cout<<"Inserisci la posizione dell'elemento da stampare => ";
cin>>pos;
if(pos>dim){
cout<<"\nERRORE";
esiste=false;
}
else
esiste=true;
}while(esiste==false);

a_capo(1);
cout<<"=====> ";
cout<<vett[pos];
a_capo(2);

//=========================================================
//Stampa tutto il vettore
//=========================================================

cout<<"L\'intero vettore e\'=> ";

for(ciclo=0;ciclo<dim;ciclo++)
cout<<vett[ciclo]<<" ";
a_capo(2);

//=========================================================
//Cerca un elemento
//=========================================================

cout<<"Quale elemento vuoi cercare? \n=> ";
cin>>cerca;

esiste=false;

for(ciclo=0;ciclo<=dim;ciclo++){
if(vett[ciclo]==cerca){
cout<<"L\'elemento si trova alla posizione => "<<ciclo;
esiste=true;}
}
if(esiste==false)
cout<<"Non esiste";
a_capo(3);

system("PAUSE");
}
 
Questo succede probabilmente perché hai un compilatore diverso da quello utilizzato sul pc scolastico. (Anche utilizzando lo stesso IDE potresti però avere un compilatore diverso installato).
Una buona soluzione per il debug di questo tipo di programmini è commentare parti del codice per scoprire dov'è l'errore.
[PARTE ELIMINATA LEGGI GIÙ PER LA SOLUZIONE CORRETTA]

Un altro errore trovato è nella stampa dell'elemento alla posizione x: riga 46 fai if(pos>dim) ma ti ricordo che gli indici degli array partono da 0 e quindi inserendo un vettore di 2 elementi avrò indici 0 e 1. Inserendo come posizione 2 me lo darà per buono e mi stamperà un valore a caso quando invece dovrebbe darmi errore (non c'è nessun elemento di indice 2!).
PS: non capisco l'utilità di una funzione che mi stampa endline quando posso benissimo usare un cout<<endl o cout<<"\n".

EDIT: Cancello e correggo ciò che avevo scritto prima. L'errore è che dichiari un array vett di dim interi. La variabile dim però non è inizializzata e quindi va in segmentation fault. Devi dichiarare l'array dopo che hai preso in input il numero di elementi che deve contenere.
ESEMPIO:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Questo è quello che la mia prof. di Programmazione 1 chiamava array semidinamici
 
Ultima modifica:
  • Like
Reactions: raffy2010
Questo succede probabilmente perché hai un compilatore diverso da quello utilizzato sul pc scolastico. (Anche utilizzando lo stesso IDE potresti però avere un compilatore diverso installato).
Una buona soluzione per il debug di questo tipo di programmini è commentare parti del codice per scoprire dov'è l'errore.
[PARTE ELIMINATA LEGGI GIÙ PER LA SOLUZIONE CORRETTA]

Un altro errore trovato è nella stampa dell'elemento alla posizione x: riga 46 fai if(pos>dim) ma ti ricordo che gli indici degli array partono da 0 e quindi inserendo un vettore di 2 elementi avrò indici 0 e 1. Inserendo come posizione 2 me lo darà per buono e mi stamperà un valore a caso quando invece dovrebbe darmi errore (non c'è nessun elemento di indice 2!).
PS: non capisco l'utilità di una funzione che mi stampa endline quando posso benissimo usare un cout<<endl o cout<<"\n".

EDIT: Cancello e correggo ciò che avevo scritto prima. L'errore è che dichiari un array vett di dim interi. La variabile dim però non è inizializzata e quindi va in segmentation fault. Devi dichiarare l'array dopo che hai preso in input il numero di elementi che deve contenere.
ESEMPIO:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Questo è quello che la mia prof. di Programmazione 1 chiamava array semidinamici


Grazie mille, inizializzando la variabile funziona tutto a meraviglia! Problema risolto! :emoji_v:
Ho aggiustato la riga 46 :emoji_grin:
PS Per quanto riguarda la funzione, non ne avevo mai fatta una ed ho voluto provare:emoji_laughing:

Grazie ancora
 
Stato
Discussione chiusa ad ulteriori risposte.