JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Listen für DOS Programm
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Apophis
Mini JLI'ler



Anmeldedatum: 28.08.2004
Beiträge: 28
Wohnort: Harz
Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 19:28    Titel: Listen für DOS Programm Antworten mit Zitat

Ich habe jetzt alles Probiert.
Alle Beispiele aus dem Buch und eigene.

Aber ALLE Listen ob nun mit class oder struct schreiben in den stack und nicht, so wie im buch geschrieben, in den heap.

Hat jemand von euch ein Listen Programm/Beispiel das im Heap arbeitet?

Ich brache das dringend.
_________________
Guckst du hier!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 08.09.2004, 19:49    Titel: Antworten mit Zitat

Code:
{
  CTest testklasse1; //Stack
  CTest *testklasse2=new CTest(); //Heap
}

_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Apophis
Mini JLI'ler



Anmeldedatum: 28.08.2004
Beiträge: 28
Wohnort: Harz
Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 20:15    Titel: Antworten mit Zitat

Ich währe ja schon dankbar, wenn Ihr mir sagen könntet, was am volgendem code falsch ist.

Code:
#include <stdio.h>
#include <conio.h>



struct Knoten {
   unsigned char Zeichen;

   Knoten* Vorgaenger;
   Knoten* Nachfolger;
};



Knoten* AktuellerKnoten = NULL;
Knoten* Listenkopf = NULL;
Knoten* Listenende = NULL;



void NeuesElement(Knoten* NeuerKnoten, char Zeichen) {
   if(Listenkopf == 0) {
      Listenkopf = NeuerKnoten;
      NeuerKnoten->Vorgaenger = NULL;
   } else {
      Listenende->Nachfolger = NeuerKnoten;
      NeuerKnoten->Vorgaenger = Listenende;
   }
   AktuellerKnoten = NeuerKnoten;
   NeuerKnoten->Zeichen = Zeichen;
   NeuerKnoten->Nachfolger = NULL;
   Listenende = NeuerKnoten;
}



void ListeAusgeben(void) {
   Knoten* p;
   p = Listenkopf;

   while(p) {
      printf("%2c 0x%08x\n", p->Zeichen, p);
      p = p->Nachfolger;
   }
}



void ListeLoeschen(void) {
   while(AktuellerKnoten) {
      Listenende = Listenende->Vorgaenger;
      AktuellerKnoten = Listenende;
      delete Listenende->Nachfolger;
      Listenende->Nachfolger = NULL;
   }
}



void main(void) {
   for(int j = 0; j < 10000; j ++) {
      for(int i = 32; i < 255; i++) {
         Knoten *k = new Knoten;
         NeuesElement(k, i);
      }
   }

   printf("Liste:\n\n");

   ListeAusgeben();

   printf("\n\nTaste Drcken!");

   ListeLoeschen();

   getch();
}

_________________
Guckst du hier!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 08.09.2004, 20:29    Titel: Antworten mit Zitat

Was genau funktioniert denn nicht ? Dein Code schaut soweit ok aus auch wenn das löschen sehr seltsam ist.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Apophis
Mini JLI'ler



Anmeldedatum: 28.08.2004
Beiträge: 28
Wohnort: Harz
Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 20:40    Titel: Antworten mit Zitat

Zitat:
Was genau funktioniert denn nicht ? Dein Code schaut soweit ok aus

Das Programm arbeitet im Stack und nicht im heap!

Zitat:
auch wenn das löschen sehr seltsam ist.

Ich weiß, hab aber keine bessere lösung.
Hast du was besseres?
_________________
Guckst du hier!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fowly
JLI'ler



Anmeldedatum: 25.01.2004
Beiträge: 196
Wohnort: Detmold - NRW
Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 20:44    Titel: Antworten mit Zitat

wieso sollte das denn nicht im heap sein? alle elemente die du mit new anlegst kommen in den heap, dafür ist er schließlich da... oder hab ich jetzt was verpasst?
_________________
<-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->

Das Spiel zu unserer Schule:

http://www.grabbe-game.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Apophis
Mini JLI'ler



Anmeldedatum: 28.08.2004
Beiträge: 28
Wohnort: Harz
Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 20:52    Titel: Antworten mit Zitat

Zitat:
wieso sollte das denn nicht im heap sein? alle elemente die du mit new anlegst kommen in den heap, dafür ist er schließlich da... oder hab ich jetzt was verpasst?

Das ist es ja, es kommt alles in den stack.
_________________
Guckst du hier!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fowly
JLI'ler



Anmeldedatum: 25.01.2004
Beiträge: 196
Wohnort: Detmold - NRW
Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 21:10    Titel: Antworten mit Zitat

und woran genau erkennst du das? ich hab nie gemerkt ob etwas im stack oder im heap ist, alles was mit new erzeugt wird ist im heap... und der rest nicht, das geht doch gar nicht anders... oder?
_________________
<-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->

Das Spiel zu unserer Schule:

http://www.grabbe-game.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 21:10    Titel: Antworten mit Zitat

wie erkennst du das
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Apophis
Mini JLI'ler



Anmeldedatum: 28.08.2004
Beiträge: 28
Wohnort: Harz
Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 21:17    Titel: Antworten mit Zitat

Zitat:
#include <stdio.h>
#include <conio.h>



struct Knoten {
unsigned char Zeichen;

Knoten* Vorgaenger;
Knoten* Nachfolger;
};



Knoten* AktuellerKnoten = NULL;
Knoten* Listenkopf = NULL;
Knoten* Listenende = NULL;



void NeuesElement(Knoten* NeuerKnoten, char Zeichen) {
if(Listenkopf == 0) {
Listenkopf = NeuerKnoten;
NeuerKnoten->Vorgaenger = NULL;
} else {
Listenende->Nachfolger = NeuerKnoten;
NeuerKnoten->Vorgaenger = Listenende;
}
AktuellerKnoten = NeuerKnoten;
NeuerKnoten->Zeichen = Zeichen;
NeuerKnoten->Nachfolger = NULL;
Listenende = NeuerKnoten;
}



void ListeAusgeben(void) {
unsigned long in = 0;
Knoten* p;
p = Listenkopf;

while(p) {
in++;
printf("%2c => 0x%08x => %8d\n", p->Zeichen, p, in);
p = p->Nachfolger;
}
}



void ListeLoeschen(void) {
while(AktuellerKnoten) {
Listenende = Listenende->Vorgaenger;
AktuellerKnoten = Listenende;
delete Listenende->Nachfolger;
Listenende->Nachfolger = NULL;
}
}



void main(void) {
for(int j = 0; j < 10000; j ++) { //<---------------------
//for(int i = 32; i < 255; i++) {
Knoten *k = new Knoten;
NeuesElement(k, 49);
//}
}

printf("Liste:\n\n");

ListeAusgeben();

printf("\n\nTaste Drcken!");

ListeLoeschen();

getch();
}


Normalerweise sollte er 10000 "Knoten" erzeugen.

Wie man aber auf dem Bild erkennen kann, tut er das nicht.
Und Komischerweise sind die adressen im stack bereich.


[EDIT] Ich benutze für dieses Programm nicht VC++ !!! Sondern "Turbo C++" weil wir das in der Schule auch benutzen. Und das Prog ist für die Schule.
_________________
Guckst du hier!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 22:17    Titel: Antworten mit Zitat

tja, VC++ erzeugt bei mir 10000 knoten, worauf dann ne fehlermeldung kommt^^

Code:

1 => 0x008ff960 =>     9979
1 => 0x008ff920 =>     9980
1 => 0x008ff8e0 =>     9981
1 => 0x008ff8a0 =>     9982
1 => 0x008ff860 =>     9983
1 => 0x008ff820 =>     9984
1 => 0x008ff7e0 =>     9985
1 => 0x008ff7a0 =>     9986
1 => 0x008ff760 =>     9987
1 => 0x008ff720 =>     9988
1 => 0x008ff6e0 =>     9989
1 => 0x008ff6a0 =>     9990
1 => 0x008ff660 =>     9991
1 => 0x008ff620 =>     9992
1 => 0x008ff5e0 =>     9993
1 => 0x008ff5a0 =>     9994
1 => 0x008ff560 =>     9995
1 => 0x008ff520 =>     9996
1 => 0x008ff4e0 =>     9997
1 => 0x008ff4a0 =>     9998
1 => 0x008ff460 =>     9999
1 => 0x008ff420 =>    10000

_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 08.09.2004, 22:23    Titel: Antworten mit Zitat

Du solltest mal prüfen was new Knoten zurück gibt.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Apophis
Mini JLI'ler



Anmeldedatum: 28.08.2004
Beiträge: 28
Wohnort: Harz
Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 22:25    Titel: Antworten mit Zitat

@Zyrian
Ja, Habe jetzt aber noch was verändert.

Code:
void ListeLoeschen(void) {
   while(Listenende->Vorgaenger) {
      Listenende = Listenende->Vorgaenger;
      AktuellerKnoten = Listenende;
      delete Listenende->Nachfolger;
      Listenende->Nachfolger = NULL;
   }
   delete Listenkopf;
   AktuellerKnoten = NULL;
   Listenkopf = NULL;
   Listenende = NULL;
}


Damit kommt die Fehlermeldung nicht mher.

Und das es mit VC++ (WIN) geht weiß ich.
Es soll aber mit Turbo C++ (DOS) auch laufen.

@FallenAngel84
Bis zum Knoten 6349 wird die Adresse zurückgegeben.
Dann nur Nullen. Also Fehler.
_________________
Guckst du hier!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 22:34    Titel: Antworten mit Zitat

gibts auf der DOS-Ebene net so eine speichergrenze?
_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 08.09.2004, 22:35    Titel: Antworten mit Zitat

Ja, dein Turbo C++ arbeitet mit 64k großen Segmenten (das dürfen viele gar nicht mehr erlebt haben Smile ). Das kommt mit den Adressen auch gut hin 63XX * 10 sind ja ungefähr 64k, dann noch der Code usw. Ich denke das könnte passen. Was für ein Speichermodell nutzt du denn? (Tiny, Small, Big, usw.)

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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