AllocMemory()

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Beitrag von Sylvia »

Andre hat geschrieben:Mal sehen, ob er das existierende CodeArchiv kurzfristig PB3.91-kompatibel bekommt...
und für 3.92 ? 3.93 ? 3.94 ?....usw.usw :freak:
Basic Pur = PureBasic
sbehrens
Beiträge: 274
Registriert: 08.09.2004 18:41
Kontaktdaten:

Beitrag von sbehrens »

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.
Stimmt! Also sollte man immer den reservierten Speicher selber wieder freigeben! *merk* (Wieder was neues dazu gelernt)

mfG
Basti
enjoy life... while you can!
coldarchon
Beiträge: 26
Registriert: 08.09.2004 09:33
Kontaktdaten:

Beitrag von coldarchon »

NicTheQuick hat geschrieben: Ist da was schwer dran zu verstehen?
schlechten Tag gehabt? Hätte ich Dein Horoskop vorher lesen sollen? Was kann man denn großartig damit erreichen, wenn man eine solche Variable ohne ID verändert?
Benutzeravatar
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

Beitrag von NicTheQuick »

Sorry, so war das ganz und gar nicht gemeint. Es war wirklich eine ernst zunehmenden Frage. Ich war ganz und gar nicht mies gelaunt. :allright:
coldarchon
Beiträge: 26
Registriert: 08.09.2004 09:33
Kontaktdaten:

Beitrag von coldarchon »

<)

aber ich weiß wirklich keinen praktischen Nutzen für das Verändern einer solchen Variable.
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

coldarchon hat geschrieben:<)

aber ich weiß wirklich keinen praktischen Nutzen für das Verändern einer solchen Variable.
Zur schnellen Speichermanipulation mit Pointern natürlich, sei es ein Bild oder eine eigene Speicherstruktur.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
BitchBird
Beiträge: 17
Registriert: 09.11.2004 10:29

Beitrag von BitchBird »

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:

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()
client:

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()
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?
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

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?
Einfach bei PeekS() die maximale Länge mit angeben:

Code: Alles auswählen

Print( PeekS(*read_buf, bytes_rec) )
Was mir noch aufgefallen ist:
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
BitchBird
Beiträge: 17
Registriert: 09.11.2004 10:29

Beitrag von BitchBird »

läuft, wunderbar! danke danilo!
Antworten