PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei Klassenprogramm 2



sp33dwalker
26.05.2009, 17:12
So bin jetzt soweit ,dass ich es ohne Fehler compiled bekomme :).

Aber nachdem ich den Namen eingegeben habe kommt die Meldung, dass Classprog.exe nicht mehr funktioniert.

Frag mich nur wieso? hier der source code:


#include <iostream>


using namespace std;

class person
{
private:
char name[30];
int alter;
char ort[50];
public:
void erzeuge(const char* n = "Waise", unsigned int a = 0, const char* ort = "nirgends");
void ausgeben(void);
};

int main(void)
{
person mensch;
int wahl;
char* name;
int alter;
char* ort1;
auswahl:

cout << "Personenverwaltung - 0.1\n";
cout << "Was moechten sie tun?\n";
cout << "1) Anzeigen 2) Erzeugen\n";
cin >> wahl;

switch (wahl)


{
case 1:
mensch.ausgeben();
break;



case 2:

cout << "Name : ";
cin >> name;
//hier ist die Stelle wo das Prog sich beendet
cout << "\n" << "Alter : ";
cin >> alter;
cout << "\n" << "Wohnort : ";
cin >> ort1;


mensch.erzeuge(name, alter, ort1);
system("cls");
cout << name << "wurde erzeugt\n";
goto auswahl;
}
system("PAUSE");
}

void person::erzeuge(const char* n, unsigned int a,const char* ort)
{

strncpy(name, n, sizeof(name) - 1);
strncpy(this->ort, ort, sizeof(this->ort) - 1);
alter = a;
}

void person::ausgeben ( void )
{
cout << name << " " << alter << " Jahre (";
cout << "Wohnort : " << ort << ")\n";
}

blackberry
26.05.2009, 17:21
name ist nur ein uninitialisierter Zeiger.
Sein Wert ist also undefiniert.

Beim Einlesen von Zeichen in eine undefinierte Adresse kommt es eigentlich immer zu Laufzeitfehlern. (außer bei dem sehr unwahrscheinlichen Fall, dass dieser undefinierte Wert tatsächlich auf eine vom Programm beschreibbare Adresse zeigt und nur unwichte Werte überschreibt)

name müsste ein Array sein.