JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=c31406dd6b13211c48fa53419bbd167bMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Am verzweifeln :)

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Virgil
Mini JLI'ler



Anmeldedatum: 09.10.2003
Beiträge: 8
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 11.02.2005, 19:22    Titel: Am verzweifeln :) Antworten mit Zitat

Wenn der User gefragt wird, ob er einen weiteren eintrag durchführen will, hängt sich das Prog auf.
Glaube das liegt daran, dass ich den Speicher nicht wieder freigebe oder ?
Könntet ihr mir bitte helfen und mir sagen wie ich den Speicher wieder freigebe ?

Vielen Dank im vorraus,

Virgil

CPP:
#include <iostream>
#include <string>
#include <stdio.h>
#include <fstream>
 
 
using namespace std;
 
 
struct daten
{
   std::string vorname;
   std::string nachname;
   std::string adresse;
 
   std::string telefonnummer;
   unsigned int alter;
 
   //Pointer auf Nachfolgendes Element in der Liste
   daten *nachfolger;  //Pointer-Erstellung der auf Daten zeigt
};
 
 
daten kopf; 
 
//Funktionsprototypen
 
void NeuerEintrag(string vorname, string nachname, string adresse, string telefonnummer, int alter);
void ausgabe(void);
bool fortsetzen(void);
daten *last(void);
 
 
int main()
{
   char auswahl;
   // Begrüßungsbildschirm...
   cout << "#######################################################\n";
   cout << "#                                                     #\n";
   cout << "#              Mini-Telefonbuch <ALPHA>               #\n";
   cout << "#                                                     #\n";
   cout << "# Willkommen, bitte treffen Sie zun" << (char)132 << "chst ihre Auswahl #\n";
   cout << "#                                                     #\n";   
   cout << "# [N] - Neuen Eintrag schreiben                       #\n";
   cout << "# [L] - Geschriebene Eintr" << (char)132 << "ge lesen                   #\n";
   cout << "# [B] - Beschreibung anzeigen                         #\n";
   cout << "# [Q] - Programm verlassen                            #\n";
   cout << "#                                                     #\n";
   cout << "#                                                     #\n";
   cout << "#  (c)2004 by Virgil G                  #\n";
   cout << "#                                                     #\n";
   cout << "#######################################################\n";
   cout << "\nIhre Auswahl: ";

 
            cout << "\nVorname: ";
            cin  >> kopf.vorname;
            cout << "Nachname: ";
            cin  >> kopf.nachname;
            cout << "Adresse: ";
            cin  >> kopf.adresse;
            cout << "Telefonnummer: ";
            cin  >> kopf.telefonnummer;
            cout << "Alter: ";
            cin  >> kopf.alter;
 
            if(fortsetzen())
            {
               do{
                  // Deklaration der Variablen vorname und nachname...
                  std::string eintrag_vorname;
                  std::string eintrag_nachname;
                  std::string eintrag_adresse;
                  std::string eintrag_telefonnummer = 0;
                  int eintrag_alter = 0;
 
 
                  cout << "Vorname: ";
                  cin  >> eintrag_vorname;
                  cout << "Nachname: ";
                  cin  >> eintrag_nachname;
                  cout << "Adresse: ";
                  cin  >> eintrag_adresse;
                  cout << "Telefonnummer: ";
                  cin  >> eintrag_telefonnummer;
                  cout << "Alter: ";
                  cin  >> eintrag_alter;
 
                  NeuerEintrag(eintrag_vorname, eintrag_nachname, eintrag_adresse, eintrag_telefonnummer, eintrag_alter);
 
               }while(fortsetzen());
            }
 
            
         ausgabe();  // Ausgabe aller einträge
         
         
   return 0;
 
}
 
 
void ausgabe(void)
{
   int i = 0;
   int eintragszahl = 0;
 
   daten *p = &kopf;   // Adresse von Listenkopf wird an den Pointer *p übergeben => Knoten
 
      while(p != 0)   // Wenn p = 0 ist, ist kein Nachfolger mehr vorhanden => Listenende
      {
 
 
         if (i==0)
         {
            cout << "\n\nAusgabe der Daten:\n\n";
         }
         i++;
         eintragszahl++;
         cout << "\nDaten fuer Person " << eintragszahl << ": \n";
         cout << "\nVorname: " << p->vorname << "\nNachname: " << p->nachname << "\nAdresse: " << p->adresse << "\nTelefonnummer: " << p->telefonnummer << "\nAlter: " << p->alter << '\n';
 
         p = p->nachfolger;
      }
      cout << "\n";
      system("PAUSE");
}
 
bool fortsetzen(void)
{
   char JaNein = 'j';
 
   cout << "\nWollen Sie einen weiteren Eintrag hinzufuegen ? j/n\n";
   cout << "Auswahl: ";
   cin  >> JaNein;
 
   if(JaNein == 'j')
   {
      return true;
   }
   else
   {
      return false;
   }
}
 
void NeuerEintrag(string vorname, string nachname, string adresse, string telefonnummer, int alter)
{
   daten *pElement = new daten;
 
   pElement->vorname = vorname;
   pElement->nachname = nachname;
   pElement->adresse = adresse;
   pElement->telefonnummer = telefonnummer;
   pElement->alter = alter;
   pElement->nachfolger = 0;
 
   daten *p = last();
   p->nachfolger = pElement;

            
}
 
daten *last(void)
{
   daten *p = &kopf;
 
   while(p->nachfolger != 0)
   {
      p = p->nachfolger;
   }
   return p;   // P = 0 wird zurückgegeben
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.02.2005, 19:41    Titel: Antworten mit Zitat

aufhängen? Das wäre dann doch wohl eher eine Endlosschleife, oder?
beim falschen freigeben, etstehen entwerder MemoryLekas, was man net merkt, oder es gibt ne Acess Violation.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.02.2005, 19:42    Titel: Antworten mit Zitat

Hi,

das das delete fehlt ist schon schlimm genug Smile aber ich würd mal diesen do-while ansatz überdenken Wink Nur so als Tipp, vielleicht kommste ja selber drauf Smile
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Virgil
Mini JLI'ler



Anmeldedatum: 09.10.2003
Beiträge: 8
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 11.02.2005, 19:43    Titel: Antworten mit Zitat

tut mir leid ,meinte nicht aufhängen Smile

Könntest Du mir vielleicht sagen, wie ich das wieder "freigebe" ?


Danke im vorraus,

virgil

Edit: @Patrick... Was ist denn mit der do-while falsch ? Very Happy Funktionieren sollte sie doch oder ? Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.02.2005, 19:45    Titel: Antworten mit Zitat

naja ich mein ja nur Smile ne while(fortsetzen) hätte es auch getan Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Virgil
Mini JLI'ler



Anmeldedatum: 09.10.2003
Beiträge: 8
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 11.02.2005, 19:51    Titel: Antworten mit Zitat

okey, optimierung vorgenommen Very Happy

Danke Dir Wink

Aber wie lös ich nun mein Problem mit dem "freigeben" ? Very Happy


Virgil
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.02.2005, 19:57    Titel: Antworten mit Zitat

tjo, anscheinend versuchst du ja gar net was freizugeben, habe kein deltet gefunden.

also, vieleicht eine rekursive Funktion, die mti dem ersten Gleid der liste anfängt, sich so lange selber aufruft, bist es keinen Nachfolger merh gibt, und dann die Struktur mit delete löschen, so das von hinten nach vorne alles gelöscht wird.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
abc_d
JLI Master Trainee


Alter: 34
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 11.02.2005, 20:07    Titel: Antworten mit Zitat

Code:

void Clean()
{
   while(last())
      delete last();
}


sollte funktionieren, aber ich gebe keine Garantie, dazu bin ich zu müde.

[edit]

= "0"; wäre besser
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Virgil
Mini JLI'ler



Anmeldedatum: 09.10.2003
Beiträge: 8
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 11.02.2005, 21:56    Titel: Antworten mit Zitat

Fehler ist nun behoben Wink

es lang an:

CPP:
std::string eintrag_telefonnummer = 0;


es muss
CPP:
std::string eintrag_telefonnummer = "0";


heißen Wink


Und danke Black für deine "Lösung" Smile


Edit:
BlackLordOfDragons hat Folgendes geschrieben:
Code:

void Clean()
{
   while(last())
      delete last();
}



Scheint nicht zu funktionieren Sad
Wenn die funktion aufgerfen wird, kommt ein "komsicher" Fehler (während der Programmausführung).

Kennt sonst noch jemand eine Lösung ? Wink


Danke,
virgil
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum