AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten ändern sich "von alleine"

Ein Thema von dominikkv · begonnen am 3. Nov 2009 · letzter Beitrag vom 4. Nov 2009
 
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#1

Daten ändern sich "von alleine"

  Alt 3. Nov 2009, 17:53
Hi,

ich hab irgendwie nen Geist in meinem Programm, der mich ein bisschen ärgert
Und zwar verändert der ab und zu Daten in einem Record.

Zuerst der Aufbau:
Delphi-Quellcode:
type
  PCategory = ^TCategory;
  PCategories = array of PCategory;

  TArticle = record
    Link, Name: string;
    Parents: PCategories; // In welchen Kategorien ist der Artikel?
    Preis: Currency;
  end;
  TArticles = array of TArticle;
  PArticle = ^TArticle;
  PArticles = array of PArticle;

  TCategory = record
    Name, Link: string;
    Children: PCategories; // Falls die Kategorie Unterkategorien hat
    Parent: PCategory; // Falls die Kategorie eine Unterkategorie ist
    Articles: PArticles; // welche Artikel sind in der Kategorie?
  end;
  TCategories = array of TCategory;

var // global
  _Categories: TCategories;
  _Articles: TArticles;
Mein Programm füllt nun diese Arrays. Während des füllens passiert etwas komisches:
Die ersten paar Datensätze werden korrekt in das Array eingetragen, dann, ohne dass ich auf die Arrays zugreifen würde, ändern sich die Daten im Array, und zwar wird zuerst _Categories[3].Articles[0] verändert, dann so nach und nach die anderen Artikel von _Categories[3]. Und zwar sieht das immer so aus, als ob der Record noch nicht initialisiert wäre, zB in .Name stehen irgendwelche Zeichen, der .Preis ist irgend eine exorbitantische Zahl und der Artikel hat plötzlich 763753 Parents, die alle auf nil stehen.

Das lustige ist, das passiert zB bei dieser Zeile, aber auch nur beim 3ten Aufruf:
_Temp := StringReplace(_Temp, '/nocache', '', []); // _Temp ist eine lokale Variable Wenn ich das so umschreibe...
Delete(_Temp, Pos('/nocache', _Temp), 8); ...tritt dieser Fehler nicht auf, dafür dann an einer anderen Stelle.

Kann mir das einer erklären?
Das einzige, was ich mir vorstellen kann, ist dass Delphi die Daten des Artikels im Speicher verschiebt, ich aber über meinen Zeiger auf den alten Speicherplatz zugreifen will. Ich rufe bei jedem neuen Artikel SetLength(_Articles, Length(_Articles) + 1); auf. Aber warum ändern sich die Daten dann erst viel später, und nicht direkt bei SetLength()?
Ich habe auch schon gehört, dass bei nicht richtig synchronisierten Threads komische Fehler auftreten können, deshalb habe ich alle Threads, die ich erstellt habe, erstmal wieder rückgängig gemacht, an denen kanns also nicht liegen.

Ich habe schon alles mögliche versucht, mit und ohne Debugger, mit und ohne automatischer Code-Optimierung usw, ich bin mit meinem Latein (oder doch eher Delphi? ) am Ende


Vorschläge sind herzlich willkommen

mfg.Dominik
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  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 04:02 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 by Thomas Breitkreuz