Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
10.09.2001, 20:38
Gollum



Hiho..

ich hab ein kleines problem.. und kA woran das liegt :) wäre cool wenn ihr mir weiterhelfen könntet..
weil ich bin langsam aber sicher am verzweifeln :)
ich brauche einen buffer für nachrichten.. das soll ein FIFO stack sein...
dazu verwende ich so eine pseudo linked list.. wobei die elemente direkt miteinander verbunden sind..
well.. hier mal der quellcode dazu:
[EDIT:]ok. is blöd zu lesen so wieso da unten ist.. hier nochmal übersichtlicher:->hier<- [/EDIT]
Quellcode:
class RecvBuffer{
friend class WinsockBase;
private:
static int iMsgCounter; //zählt die nachrichten
static RecvBuffer* pHead; //zeigt immer auf das letzte objekt in der ll
static RecvBuffer*   pFirst; //zeigt auf das erste objekt der ll
char* szMessage; //hier kommt die nachricht rein
RecvBuffer* pNext; //zeigt auf das jeweils nächste objekt in der ll
public:
RecvBuffer(char* szEntry); //hier wird gleich von konstruktor aus die nachricht in
//  szMessage geschreiben, und das objekt in die ll gehängt
~RecvBuffer(); //ehm jo. hab ich noch ned eingebaut.. komtm am schluss
//  wenn alles gehth :)
char* GetString(); //das gibt szMessage zurück
char* GetNext(); //gibt die nachricht aus dem aktuell ersten objekt in der ll
//zurück, und setzt dann den pFirst zeiger auf das pNext'e
//objekt in der ll...
};
int RecvBuffer::iMsgCounter=0;
RecvBuffer* RecvBuffer::pHead;
RecvBuffer* RecvBuffer::pFirst;

RecvBuffer::RecvBuffer(char* _szMessage):szMessage(_szMessage){
iMsgCounter++;
printf("====== Nachricht #%.4d ======\n",iMsgCounter);
if(iMsgCounter==1){ //wenn es die erste nachricht ist
printf("Erste Nachricht\n"); //  wird pFirst auf this gesetzt...
pFirst=this;
}
printf("this:\t\t %d\n",this);
if(iMsgCounter>1){ //wenn es ned die erste nachricht ist wird
pHead->pNext=this; //  pNext vom vorherigen objekt auf this gesetzt
printf("pNext(vorher):\t %d\n", pHead->pNext);
}
pNext=NULL; //pNext wird für den anfang mla auf NULL gesetzt
printf("pHead(vorher):\t %d\n", pHead);
pHead=this; //pHead wird jetzt noch auf this gesetzt...
printf("pFirst:\t\t %d\n",pFirst);
printf("pHead(neues):\t %d\n",pHead);
printf("=============================\n",iMsgCounter);
}

char* RecvBuffer::GetString(){return szMessage;}

char* RecvBuffer::GetNext(){
if(iMsgCounter>0){ //Wenn noch nachrichten da sind wird das hier ausgeführt
iMsgCounter--; //den nachrichtenzähler mal dekrementieren
char* szResult = pFirst->GetString();//in den rückgabestring wird die nachricht von pFirst geschreiben
printf("ADRESSE VON pFirst: %d",pFirst);
if(iMsgCounter>0) //jetzt ist pNext das neue pFirst in der ll sofern es
pFirst=pFirst->pNext; //  überhaupt noch pNext gibt :)
return szResult;
}else //wenn keine nachrichten mehr da sind einfach "ERROR"ausgeben...
return "ERROR";
}

Nur.. wenn ich jetzt was sende das in den buffer geschreiben werden soll.. zB:
Quellcode:
Die gesendeten Nachrichten:
Das ist die erste nachricht
Das ist die zweite nachricht
Das ist die dritte nachricht.....

Und das hier ist die ausgabe die ich oben debugmäßig eingebaut hab....
====== Nachricht #0001 ======
Erste Nachricht
this:            8072584
pHead(vorher):   0
pFirst:          8072584
pHead(neues):    8072584
=============================
====== Nachricht #0002 ======
this:            8072608
pNext(vorher):   8072608
pHead(vorher):   8072584
pFirst:          8072584
pHead(neues):    8072608
=============================
====== Nachricht #0003 ======
this:            8080512
pNext(vorher):   8080512
pHead(vorher):   8072608
pFirst:          8072584
pHead(neues):    8080512
=============================

und hier lass ich schließlich einmal alles anzeigen:
ADRESSE VON pFirst: [b]8072584[/b]**** Empfangen: Das ist die dritte nachricht..... ****
ADRESSE VON pFirst: [b]8072608[/b]**** Empfangen: Das ist die dritte nachricht..... ****
ADRESSE VON pFirst: [b]8080512[/b]**** Empfangen: Das ist die dritte nachricht..... ****

WTF?? wieso steht hier überall der inhalt von der dritten nachricht drin??? vor allem passt
der pFirst zeiger ja überall ://

hmm. hat jemand sich die mühe gemacht und sich das angeschaut, und weiß warum des ned so geht ??
wär echt genial von euch :)

thx & cyA

--

[url="http://www.thelordoftherings.com/cgi-bin/get-image.pl?ID=alan-lee-058 "]-N/A-[/url]
[url="http://www.microsoft.com/germany/ms/unternehmensinformationen/historie.htm "]Mean cats eat parakeets![/url]


Dieser Beitrag wurde am 10.09.2001 um 20:52 von Gollum bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche