|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
[C++]Questo programma mi crasha
Salve a tutti.
Ho un problema con i vettori in C++. Ho scritto questo programmino che riempie un vettore lungo n, lo ordina e ne mostra a schermo gli elementi. Compila senza errori. Lanciandolo mi fa riempire il vettore ma poi mi crasha. Se invece di dichiarare un vettore generico ne dichiaro uno di lunghezza prefissata va tutto liscio. Uso Dev sotto WinXP. Riporto sotto il codice. Ciao, G. Codice:
#include <iostream>
#include <vector>
using namespace std;
//funzione per riecmpire il vettore
void carica(int n,vector<int> v){
//void carica(int n,int v[]){
int i;
int prova;
cout<<"inserire i voti"<<endl;
for(i=0;i<n;i++) {
cin>>prova;
v.push_back(prova);
}
}
//funzione per ordinare gli elementi del vettore
//void ordina(int n,int v[]){
void ordina(int n,vector<int> v){
int i,j;
int temp;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++){
if(v[i]>v[j]){
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
}
}
int main(){
//int voti[10];
vector<int> voti;
int n;
int j;
int m;
float med;
float somma=0;
cout<<"inserire numero voti"<<endl;
cin>> n;
carica(n,voti);
ordina(n,voti);
for(j=0;j<n;j++) cout<<"voti "<<voti[j]<<endl;
//for(m=1;m<9;m++)
for(m=1;m<n-1;m++) somma=voti[m]+somma;
med=somma/(n-2);
cout<<"la media e' "<<med<<endl;
system("pause");
}
__________________
Roma: affitto stanza ammobiliata a ragazzo/a lavoratore/ice e/o studente/ssa adiacente metro. Mandatemi un pvt o mail Sono Dott. in Fisica: offro lezioni in matematica e fisica a ragazzi dalle elementari fino all'università a Roma Nord, prezzi modici Utente da evitare: fabyor Ultima modifica di ciottano : 29-07-2008 alle 16:52. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Ciao,
innanzitutto cambia il titolo aggiungendo in [C++] in testa prima che ti scoprano (vabbe', c'e' scritto che e' un crash quindi puo' esser solo C/C++ Riguardo al crash: quando usi i vector (e li passi alle funzioni), non hai dato la possibilita' di MODIFICARLI all'interno della funzione! Il compilatore fara' una copia del vettore e lo passera' alle funzioni carica() e ordina(). Una volta completata l'esecuzione delle funzioni in oggetto, non ci sara' ovviamente una copia al contrario. Ecco che quindi accederai, sia in ordinamento sia in stampa, ad elementi che non esistono. Ciao
__________________
In God we trust; all others bring data |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
Quote:
Cmq se non uso un vettore di dimensione indefinita ma lo dichiaro di lunghezza, chessò, 10, non ho problemi e tutto fila liscio. Quindi non credo che dipenda dal fatto che non mi ridia una copia in uscita dalle funzioni. Grazie, ciao, G. |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Aggiungi un simbolo & (spero che si veda, non vorrei sia interpretato in maniera strana) alle dichiarazioni. Cosi' come li hai dichiarati, quei vettori (vector, intendo) sono solamente variabili di ingresso. Diverso e' quando usi il vettore[] poiche' passi un indirizzo...
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
In pratica sottovento ti sta suggerendo di passare come parametro la reference al vettore (operatore &): in questo modo, nel contesto della funzione verrà passato l'indirizzo del tuo vettore e le operazioni che quella funzione ci farà sopra modificheranno il tuo vettore.
Altrimenti, come ha già spiegato sottovento, il passaggio del parametro avviene per copia: all'interno della funzione verrà manipolata una copia del vettore, che esiste solo nello scope della funzione. All'esterno il tuo vettore risulterà immutato.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
Bene, grazie ad entrambi, ora ho capito il problema.
Provo e vi faccio sapere il risultato. G. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
Ho risolto aggiungendo & come suggeritomi da sottovento.
Grazie ancora ad entrambi, G. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:11.



















