AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Ungültige Zeigeroperation (FreeMem)
Thema durchsuchen
Ansicht
Themen-Optionen

Ungültige Zeigeroperation (FreeMem)

Ein Thema von Alter Mann · begonnen am 1. Okt 2016 · letzter Beitrag vom 2. Okt 2016
 
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.055 Beiträge
 
Delphi 12 Athens
 
#3

AW: Ungültige Zeigeroperation (FreeMem)

  Alt 1. Okt 2016, 12:24
// EDIT: hatte den Tab wohl zu lange offen, ich lasse es mal trotzdem so

Ich frage mich wie das jemals funktioniert hat. Vielleicht gab es vorher ein anderes Move als System.Move?

Move bekommt einen Puffer als ersten Parameter, d.h. du müsstest das erste Zeichen übergeben, nicht den String (was intern ja ein Pointer ist). Und warum das +1 bei der Größe? So schreibst du die eine Hälfte des Nullzeichens mit in die Datei!?

Dazu kommt, dass WriteFile genau wie Move im zweiten Parameter einen Puffer übergeben bekommt und keinen Pointer auf die Daten.
Eventuell hat sich diese Deklaration in Delphi irgendwann geändert.

So wäre es korrekt:
Delphi-Quellcode:
var
  Buffer : Pointer;
  Msg : String;
  dwSize : DWORD;
  dwBW : DWORD;
...
  dwSize := Length(Msg) * SizeOf(Char);
  dwBW := 0;
  GetMem(Buffer, dwSize);
  Move(Msg[1], Buffer^, dwSize);
  Result := WriteFile(FHandle, Buffer^, dwSize, dwBW, nil);
  FileClose(FHandle);
  FreeMem(Buffer, dwSize);
Allerdings frage ich mich warum du das so kompliziert machst. Warum nicht einfach so?
Delphi-Quellcode:
var
  Msg : String;
  dwSize : DWORD;
  dwBW : DWORD;
...
  dwSize := Length(Msg) * SizeOf(Char);
  dwBW := 0;
  Result := WriteFile(FHandle, Msg[1], dwSize, dwBW, nil);
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz