Speicherzugriffsfehler, beim schreiben eines Adressbuches

sunmania

Mitglied
hallo zusammen,

ich wollte ein Adressbuch schreiben, dass mehrere Adressen von verschiedenen Personen speichern kann. Ich habe folgendes Programm geschrieben:

Code:
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
	
main ()
{
int s;
char *Name[40];
char *Vorname[40];
char *Adresse[40];
char *Ort[40];

printf ("\33[2J");
printf ("\33[01;01H");
int auswahl;
cout << "ADRESSBUCH \n" ;
cin >> auswahl;
if (auswahl = 1)
	{
	printf ("\33[2J");
	printf ("\33[01;01H");
	cout << "Adressbuch >> Personen\n\n\n1 - hinzufügen\n\nAuswahl: ";
	cin >> auswahl;
	if (auswahl = 1)
		{
		printf ("\33[2J");
		printf ("\33[01;01H");
		printf("HINZUFÜGEN\n============\n");
		scanf ("%d", &s);
		cout << "Name: ";
		gets (Name[s]);
		cout << "Vorname: ";
		cin >> Vorname[s];
		}
	}

return 0 ;
}

Dieses Programm kann man compilieren, aber leider kommt ein Fehler: "Speicherzugriffsfehler". Was ist falsch oder was soll ich an dem Program besser schreiben?
 
Hi.

Du mixt ja von der Ein-/Ausgabe mit printf/scanf und den iostream Klassen alles wild durcheinander. Warum? Entscheide dich für eine Methode.

C++:
char *Name[40];
Hier hast du ein Array von 40 Zeigern auf "char" angelegt. Gut. Aber wo zeigen die Zeiger denn nun hin? Du mußt erstmal die Arrays initialisieren und Speicher für die Strings bereitstellen.

Warum verwendest du nicht std::string's? Dann brauchst du dich um die Speicherverwaltung nicht zu kümmern:
C++:
#include <iostream>
#include <string>

using namespace std;

string name[40];

getline(cin, name[3]);
Gruß
 
danke, das hat mir geholfen. Ich habe nun ein anderes Problem. Mein Code lautet nun:
Code:
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
	
main ()
{
using namespace std;
int s;
string name[40];
string Vorname[40];
string Adresse[40];
string Ort[40];

printf ("\33[2J");
printf ("\33[01;01H");
int auswahl;
cout << "ADRESSBUCH \n" ;
cin >> auswahl;
if (auswahl = 1)
	{
	printf ("\33[2J");
	printf ("\33[01;01H");
	cout << "Adressbuch >> Personen\n\n\n1 - hinzufügen\n\nAuswahl: ";
	cin >> auswahl;
	if (auswahl = 1)
		{
		printf ("\33[2J");
		printf ("\33[01;01H");
		printf("HINZUFÜGEN\n============\n");
		scanf ("%d", &s);
		printf("Name: ");
		getline(cin, name[s]);
		printf("Vorname: ");
		getline(cin, Vorname[3]);
		}
	}

return 0 ;
}
wenn ich es nun ausführe kommt:
HINZUFÜGEN
============
2
Name: Vorname:
Ich kann für Name nichts eingeben. Wo liegt der Fehler? danke im voraus
 
Hi.
Ich kann für Name nichts eingeben. Wo liegt der Fehler? danke im voraus
Das liegt daran, das dort im Eingabepuffer noch ein \n liegt welches von scanf nicht entfernt wurde. D.h. du erwischt mit dem getline() Aufruf alles was noch in der Zeile mit der Zahl stand bis zum \n Zeichen. Lies einfach diese Zeile in eine tmp Variable aus bevor du den Namen einliest.

Übrigens, da gibt's noch ein paar Fehler:
  • die Funktion main muss int zurückgeben, implizit int ist nicht erlaubt
  • Headerdateien haben in C++ keine Endung (iostream statt iostream.h), C Header werden in C++ auch ohne Endung, aber mit dem Präfix c eingebunden (cstring statt string.h)

Gruß
 
...Fortsetzung:
Code:
if (auswahl = 1)
Diese Bedingung ist immer WAHR!
In C und C++ ist der Vergleichsoperator '==' das andere wäre eine Zuweisung.
also:
Code:
if (auswahl == 1)
 
Zurück