und für 3.92 ? 3.93 ? 3.94 ?....usw.uswAndre hat geschrieben:Mal sehen, ob er das existierende CodeArchiv kurzfristig PB3.91-kompatibel bekommt...
AllocMemory()
Stimmt! Also sollte man immer den reservierten Speicher selber wieder freigeben! *merk* (Wieder was neues dazu gelernt)NicTheQuick hat geschrieben:Das reicht solange wie die Variable "Var" nicht geändert wird. Schließlich musst du den Speicher nach Gebrauch wieder mit dem Rückgabewert als Handle freigeben. Wird das Handle geändert oder gelöscht, kannst du den Speicher nicht mehr freigeben, außer du beendest das Programm. Man sollte sich aber selbst angewöhnen solche Sachen selbst zu kontrollieren und freizugeben.
mfG
Basti
enjoy life... while you can!
-
coldarchon
- Beiträge: 26
- Registriert: 08.09.2004 09:33
- Kontaktdaten:
- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
-
coldarchon
- Beiträge: 26
- Registriert: 08.09.2004 09:33
- Kontaktdaten:
- freedimension
- Admin
- Beiträge: 1987
- Registriert: 08.09.2004 13:19
- Wohnort: Ludwigsburg
- Kontaktdaten:
ich hab da auch so ein problem... ich wollte mich halt in die network library reinarbeiten, und testweise einen minichat schreiben. der server empfängt, der client sendet halt.
server:
client:
nun wird der speicher aber nie ganz geleert. es kommen sonderzeichen dazu oder der rest eines vorher längeren strings wird mitausgegeben. ich sage dazu, dass ich von pointern und buffer u.ä. nicht wirklich was verstehe und es auch nicht aus der hilfe rausholen konnte.... lösungsvorschläge?
server:
Code: Alles auswählen
InitNetwork()
OpenConsole()
CreateNetworkServer(6000)
*read_buf = AllocateMemory(1024)
Repeat
taste$ = Inkey()
If NetworkServerEvent() = 1
PrintN("Neuer Client!")
EndIf
If NetworkServerEvent() = 4
PrintN("Client left!")
EndIf
If NetworkServerEvent() = 2
Repeat
client_id = NetworkClientID()
bytes_rec = ReceiveNetworkData(client_id, *read_buf, 1024)
Print(PeekS(*read_buf))
Until(bytes_rec < 1024)
FreeMemory(*read_buf)
PrintN("")
EndIf
Delay(10)
Until Left(taste$, 1) = Chr(27)
CloseNetworkServer()
CloseConsole()
Code: Alles auswählen
InitNetwork()
OpenConsole()
OpenNetworkConnection("127.0.0.1",6000)
ConnectionID = OpenNetworkConnection("127.0.0.1",6000)
Repeat
taste$ = Inkey()
If Left(taste$,1) = Chr(9)
message$ = Input()
SendNetworkString(ConnectionID,message$)
PrintN("")
EndIf
Delay(10)
Until Left(taste$,1) = Chr(27)
CloseNetworkConnection(ConnectionID)
CloseConsole()
Einfach bei PeekS() die maximale Länge mit angeben:BitchBird hat geschrieben:nun wird der speicher aber nie ganz geleert. es kommen
sonderzeichen dazu oder der rest eines vorher längeren
strings wird mitausgegeben.
lösungsvorschläge?
Code: Alles auswählen
Print( PeekS(*read_buf, bytes_rec) )Du gibst den Puffer nach dem ersten komplett empfangenen
String wieder frei.
Wenn der nächste String empfangen wird existiert der Puffer
nicht mehr und ein Crash ist nahe.
Das FreeMemory(*read_buf) solltest Du also nach der
Repeat..Until-Schleife positionieren.
Wenn diese 2 Dinge behoben sind sollte es die Probleme
nicht mehr geben.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
