PDA

View Full Version : [C++] Errore di segmentazione


>Alexan<
18-09-2011, 23:07
ho fatto un programmino semplice semplice per calcolare la norma di un vettore...
il codice è il seguente:


#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

typedef double vettore[21];

void leggi_int(int&);
void leggi_vettore(vettore,int);
double norm2(vettore,int);

main()
{
int n,i;double norma;vettore v;
leggi_int(n);
leggi_vettore(v,n);
norma=norm2(v,n);
cout << setprecision(19) << norma << endl;
return 0;
}

void leggi_int(int& n)
{
cout << "\n\n inserire un numero intero maggiore di uno e minore di 20\n\n ";cin >> n;
if ((n<2)||(n>19))
{
cout << "\n\n il valore inserito non è accettabile!!!";
return leggi_int(n);
}
return;
}

void leggi_vettore(vettore v,int n)
{
int i;
for (i=1;i<=n;i++)
{
cout << "\n inserire la componente numero " << i << "\n ";cin >> v[i];
}
return;
}

double norm2(vettore v,int n)
{
int i;double norma=0;
for (i=1;1<=n;i++) norma=norma+v[i]*v[i]; // l'errore è qui!!
norma=sqrt(norma);
return norma;
}



quando vado a compilare mi dà errore di segmentazione... dovrebbe essere alla riga che ho segnato nel corpo della funzione "norm2", ma non riesco a capire perchè sia sbagliato...
qualcuno può darmi una mano??

Freaxxx
18-09-2011, 23:26
ho fatto un programmino semplice semplice per calcolare la norma di un vettore...
il codice è il seguente:


#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

typedef double vettore[21];

void leggi_int(int&);
void leggi_vettore(vettore,int);
double norm2(vettore,int);

main()
{
int n,i;double norma;vettore v;
leggi_int(n);
leggi_vettore(v,n);
norma=norm2(v,n);
cout << setprecision(19) << norma << endl;
return 0;
}

void leggi_int(int& n)
{
cout << "\n\n inserire un numero intero maggiore di uno e minore di 20\n\n ";cin >> n;
if ((n<2)||(n>19))
{
cout << "\n\n il valore inserito non è accettabile!!!";
return leggi_int(n);
}
return;
}

void leggi_vettore(vettore v,int n)
{
int i;
for (i=1;i<=n;i++)
{
cout << "\n inserire la componente numero " << i << "\n ";cin >> v[i];
}
return;
}

double norm2(vettore v,int n)
{
int i;double norma=0;
for (i=1;1<=n;i++) norma=norma+v[i]*v[i]; // l'errore è qui!!
norma=sqrt(norma);
return norma;
}



quando vado a compilare mi dà errore di segmentazione... dovrebbe essere alla riga che ho segnato nel corpo della funzione "norm2", ma non riesco a capire perchè sia sbagliato...
qualcuno può darmi una mano??

prova a mettere quel v[i] tra parentesi tonde insieme al v[i] che precede

for (i=1;1<=n;i++) norma=norma+(v[i])*(v[i]);

marco.r
19-09-2011, 08:23
ho fatto un programmino semplice semplice per calcolare la norma di un vettore...
il codice è il seguente:


for (i=1;i<=n;i++)
{
cout << "\n inserire la componente numero " << i << "\n ";cin >> v[i];
}


In C++ gli indici di un vettore di dimensione N vanno da 0 a N-1, non da 1 a N
I cicli for andrebbero riscritti come

for (int i=0; i<n; ++i)
// ...

ESSE-EFFE
19-09-2011, 08:59
Attenzione:



double norm2(vettore v,int n)
{
int i;double norma=0;
for (i=1;1<=n;i++) norma=norma+v[i]*v[i]; // l'errore è qui!!
norma=sqrt(norma);
return norma;
}

>Alexan<
19-09-2011, 09:42
lo so, ma ho definito la variabile vettore come un array che ha dimensione sempre di almeno n+1, appunto per comodità nel definire i cicli!
anche correggendo il programma come dite voi l'errore c'è lo stesso!

P.S. @Freaxxx: ho provato anche a mettere le parentesi come hai detto tu, ma non risolve...

Scusate... non avevo visto che nell'ultimo ciclo c'è un 1 invece della i... grazie ESSE-EFFE!

ESSE-EFFE
19-09-2011, 09:45
anche correggendo il programma come dite voi l'errore c'è lo stesso!
Scusa, ma hai visto l'errore che ho evidenziato?

pabloski
19-09-2011, 09:48
for (i=1;1<=n;i++) norma=norma+v[i]*v[i];


che erroraccio :D

1 <= n??? è i <= n, altrimenti logicamente va in loop e i arriva alle stelle

>Alexan<
19-09-2011, 11:52
Scusa, ma hai visto l'errore che ho evidenziato?

si si!! ho editato il messaggio prima che rispondessi di nuovo!
grazie ancora a tutti!

Emalele1688
19-09-2011, 13:49
Gli errori di segmentazione sono la cosa per cui mi ci cemento fino all'esaurimento. Usa software di Debugging, o il debugger incluso nel tuo compilatore. Ti facilita la vita ed eviti nervi ed arrabbiature contro il tuo PC:D