PDA

View Full Version : [C++] Errore a run time...


pixie
06-02-2010, 14:36
Salve a tutti. Questa è il codice che mi crea problemi

[CODE]
#include <iostream>
#include <cstring>
#include <string>
using namespace std;

const int dim = 80;

struct ind {
char nome [dim];
char cognome [dim];
char email [dim];
};


int main ()
{
int num;
int x = 0;
ind dati[num];

cout <<"Inserisci numero di indici: ";
cin >> x;

cout <<"*** FASE COMPILAZIONE DELLA LISTA INVITATI ***" <<endl;

for (num = 0; num < x; num++)
{
cout <<"Inserire nome: ";
cin >> dati[num].nome;
cout <<"Inserire cognome: ";
cin >> dati[num].cognome;
cout <<"Inserire email: ";
cin >> dati[num].email;
}

return 0;

}
[\CODE]

è solo un semplice esercizio sugli array di struct. Il problema è che in fase di compilazione non mi da nessun problema. Appena avvio il programma mi da errore di sistema.
Utilizzo NetBeans. Ho provato anche a utilizzare code blocks e dev C++.
Tutti quanti mi danno lo stesso problema.
Ho provato pure a fare un debug con dev C++ e mi dice "Errore di segmentazione" ma non capisco cosa sia.
Spero possiate aiutarmi. Grazie!

pixie
06-02-2010, 14:37
Scusate ecco il codice:

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

const int dim = 80;

struct ind {
char nome [dim];
char cognome [dim];
char email [dim];
};


int main ()
{
int num;
int x = 0;
ind dati[num];

cout <<"Inserisci numero di indici: ";
cin >> x;

cout <<"*** FASE COMPILAZIONE DELLA LISTA INVITATI ***" <<endl;

for (num = 0; num < x; num++)
{
cout <<"Inserire nome: ";
cin >> dati[num].nome;
cout <<"Inserire cognome: ";
cin >> dati[num].cognome;
cout <<"Inserire email: ";
cin >> dati[num].email;
}

return 0;

}

Unrue
06-02-2010, 14:42
int main ()
{
int num;
int x = 0;
ind dati[num];



num non è inizializzato..

Ilbaama
06-02-2010, 14:44
devi inizializzare num altrimenti non sa la dimensione dell'array dati
[...]
int main ()
{
int num;
int x = 0;
ind dati[num];

cout <<"Inserisci numero di indici: ";
cin >> x;

// qui metti un controllo per far sapere che x deve essere minore di num

cout <<"*** FASE COMPILAZIONE DELLA LISTA INVITATI ***" <<endl;

for (num = 0; num < x; num++)
{
cout <<"Inserire nome: ";
cin >> dati[num].nome;
cout <<"Inserire cognome: ";
cin >> dati[num].cognome;
cout <<"Inserire email: ";
cin >> dati[num].email;
}

return 0;

}

pixie
06-02-2010, 14:50
c ho già provato poi mi sn accorto che num viene già inizializzato nel ciclo for .. Nello specifico:
=> per x = 2;
=> mi fa inserire nome, cognome, email per il primo ciclo e solo nome e cognome per il secondo ciclo... quando è il momento di inserire l'email mi da errore di sistema.

Unrue
06-02-2010, 14:52
c ho già provato poi mi sn accorto che num viene già inizializzato nel ciclo for .. Nello specifico:
=> per x = 2;
=> mi fa inserire nome, cognome, email per il primo ciclo e solo nome e cognome per il secondo ciclo... quando è il momento di inserire l'email mi da errore di sistema.

Devi inizializzarlo prima di fare:

ind dati[num];

Altrimenti quanti elementi ha dati[] ?

Inoltre rischi comunque di sforare l'array in quanto se ad esempio num=10 e l'x inserito vale 20, fai troppi cicli uscendo dal range di dati[]. Devi controllare che l'x inserito non sia più grande di num-1, dopo aver inizializzato num prima dell'allocazione ovviamente.. ;)

pixie
06-02-2010, 14:56
quindi Unrue intendi:
int num = 0;
int x = 0;
ind dati[num];
Se ho capito bene intendi questo però ho spiegato che c avevo già provato in precedenza e mi da lo stesso identico errore.

Unrue
06-02-2010, 15:01
quindi Unrue intendi:
int num = 0;
int x = 0;
ind dati[num];
Se ho capito bene intendi questo però ho spiegato che c avevo già provato in precedenza e mi da lo stesso identico errore.


Certo che dà errore, stai cercando di allocare zero elementi..

pixie
06-02-2010, 17:33
ok ho risolto... grz mille dell'aiuto a tutti .. a presto :)