S
Das Problem besteht darin, dass ich eigentlich nirgends Pointer übergebe. Ich übergebe lediglich mit jedem Aufruf eine Referenz des anfangs erstellten Netzes, so dass alle Änderungen in demselben Netz vorgenommen werden. Dazu übergebe ich ab und zu noch weitere Variablen, die ich für meine Funktionen benötige. Ich verstehe auch ehrlich gesagt nicht, warum das ausgerechnet nur passiert, wenn ich die Methode netz_oeffnen() aufrufe. Hat das irgendetwas mit der Art, wie ich die Daten einlese zu tun?
Auszug aus der Methode netz_oeffnen():
bool netz_oeffnen(SemanticNet& netz, const string& pfad){
is.open(pfad.c_str());
int bezeichner; //Zum Identifizieren der auszuführenden Methode
string name, vorname, adstatus, email, titel, dokstatus, dateipfad;
int pos, pos2, vorwahl, telnr, jahr, monat, tag, stunde, minute, dauer;
if (!is){
return false;
}
//Einlesen der Daten und Aufbau des Netzes
while (true){
if (!is.read((char*)&bezeichner, sizeof(int))){
break;
}
switch (bezeichner){
case 100: //Alle Methoden für Adressen
getline(is, name, '\0');
getline(is, vorname, '\0');
getline(is, adstatus, '\0');
getline(is, email, '\0');
is.read((char*)&vorwahl, sizeof(int));
is.read((char*)&telnr, sizeof(int));
{
Adressen ad(name, vorname, adstatus, email, vorwahl, telnr);
netz.adresse_hinzufuegen(ad);
}
break;
case 200: //usw.
}
return true;
}
Ich muss ja die Erstellung der Adresse in dem Case-Block in einen Anweisungsblock packen, damit die Adresse nur lokal definiert bleibt. Wenn ich die Methode also verlasse, sucht er dann vergeblich nach der Adresse, weil sie bereits gelöscht wurde? Oder bleibt diese Adresse im Heap erhalten, weil ich sie ja zum Netz hinzugefügt habe und das Netz nur eine Referenz ist?