Hallo Leutz,
ich wollte mich mal mit Zeigern umtun, und komme schon an folgender Stelle nicht weiter:
Ich habe eine Form und einen Button darauf. Folgendes ist alles an Quelltext, nur zum Test:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 =
class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
Ding :
String;
Zeiger_auf_Ergebnis : PWideChar;
Ergebnis : PWideChar;
Ergebnis_dereferenziert : WideString;
begin
Ding := '
öpZnR§5X0';
Zeiger_auf_Ergebnis := StringToWideChar(Ding, Ergebnis, 20);
Ergebnis_dereferenziert := Zeiger_auf_Ergebnis^;
end;
end.
Im Debug-Modus habe ich herausgefunden, dass der Fehler auftritt, wenn die Ausführposition auf dem "end;" der Ereignisbehandlungsroutine steht und ich dann F8 drücke (
also nicht bei Ausführung einer der Zuweisungen!).
Fehlertext:
Zugriffsverletzung bei Adresse 00402DFD in Modul 'Project1.exe'. Lesen von Adresse FFFF0000
Wenn ich die kompilierte EXE starte (also nicht aus der
IDE heraus), dann stecke ich nach Button-Druck in einer
Exception-Schleife fest und kann das Programm nicht mehr beenden.
Falls jemand einen heißen Tipp für mich hat, wär' ich dankbar, ich vermute ich missverstehe irgendwas an der Zeigerarithmetik, möglicherweise interpretiere ich auch WideString fälschlicherweise als eine Art String... aber viel mache ich ja nicht damit außer ein paar Zuweisungen...
Gespannt,
Caps
Edit:
ps Einen abstrakten Fehler bekomme ich, wenn ich die Puffergröße kleiner als die Stringlänge von "Ding" wähle, aber das ist vielleicht nebensächlich... wollte's nur gesagt haben