Hallo
I habe ein Projekt bestehend aus den beiden folgenden simplen files:
Code:
unit MyThread;
interface
uses
Classes;
type TMyThread = class(TThread)
private
a : array[0..432] of Byte; //431 works
end;
implementation
end.
Code:
unit Main;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Xml.XMLDoc,
Xml.XMLIntf, MyThread;
type
TForm1 = class(TForm)
end;
var
Form1: TForm1;
xmlDoc : TXMLDocument;
nodeList : IXMLNodeList;
myThread : TMyThread;
implementation
{$R *.dfm}
begin
myThread := TMyThread.Create(true);
xmlDoc := TXMLDocument.Create(nil);
xmlDoc.FileName := 'myXml.xml';
xmlDoc.Active := true;
nodeList := xmlDoc.DocumentElement.ChildNodes.FindNode('PersonalData').ChildNodes; //never returns if TMyThread member "a" has more than 432 entries
end.
Die letzte Code-Zeile
nodeList := ... kehrt nie zurück wenn im thread der member "a" mehr als 432 einträge besitzt (so wie der code oben).
Wird ein Eintrag reduziert dann kehrt die letzte Code-Zeile sofort zurück: a : array[0..
431] of Byte;
Ich verstehe nicht warum der Thread und die Verarbeitung vom
XML irgendetwas mit einander zu tun haben sollten.
Irgendwie hab ich die Vermutung, dass hier Speicherbereiche überschrieben werden.
Aber warum erscheint keine Fehlermeldung?
Mach ich was falsch?
Für weitere Informationen hab ich das ganze Projekt auch gleich angehängt.
Ich erzeuge ein 32bit Applikation auf einen Windows 10 64bit System
Bin dankbar für jede Antwort
Erich