AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Änderung einer Variablen bewirkt Änderung des Feldinhalts

Änderung einer Variablen bewirkt Änderung des Feldinhalts

Ein Thema von roadrunner-S51 · begonnen am 15. Mai 2013 · letzter Beitrag vom 15. Mai 2013
Antwort Antwort
Seite 1 von 3  1 23   
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#1

Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 09:21
Hallo,

bei einem Delphi-Programm ist mir neulich ein merkwürdiger Fehler aufgefallen. Wenn ich den Inhalt einer String-Variablen ändere, ändert sich in einem dynamischen Array, was mit dieser Variablen nicht zu tun hat, der Inhalt eines Elements. Dies führt im weiteren Ablauf zu Schreibfehlern u.a..

Ist jemandem schonmal das Problem so oder ähnlich aufgefallen? Vielen Dank schonmal für eure Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 09:41
Hört sich nach nicht sauberer Speicherverwaltung an ... getmem, freemem, irgendwie sowas.
  Mit Zitat antworten Zitat
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 09:55
Das wäre eine Idee.
Ich habe mittlerweile irgendwie das Gefühl, das der Speicher, der dem Programm zugewiesen wird nicht ausreicht. Gibt es da Grenzen?
Das Feld in dem die unbeabsichtigten Änderungen auftreten ist recht groß..., es dient als Zwischenspeicher für den Inhalt einer Textdatei. Dazu kommen noch ein paar kleinere Felder für Zwischenergebnisse der Suchen innerhalb des großen Feldes.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:04
In der Delphi-Hilfe zu Stringtypen steht:

Zitat:
String-Typen

Typ Maximale Länge Erforderlicher Speicherplatz Verwendungszweck
ShortString
255 Zeichen
2 bis 256 Byte
Abwärtskompatibilität

AnsiString
~2^31 Zeichen
4 Byte bis 2 GB
8-Bit-Zeichen (ANSI), DBCS ANSI, MBCS ANSI, Unicode-Zeichen usw.

UnicodeString
~2^30 Zeichen
4 Byte bis 2 GB
Unicode-Zeichen, 8-Bit-Zeichen (ANSI), Mehrbenutzer-Server und mehrsprachige Anwendungen

WideString
~2^30 Zeichen
4 Byte bis 2 GB
Unicode-Zeichen, Mehrbenutzer-Server und mehrsprachige Anwendungen. UnicodeString wird im Allgemeinen bevorzugt, außer für COM-Anwendungen.
  Mit Zitat antworten Zitat
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:12
Ich habe mich etwas verwirrend ausgedrückt. Mit Strings arbeitet das Programm kaum. Und die entsprechenden Längen werden immer eingehalten.
Die Textdatei ist eine csv-Datei, deren Inhalt beim Einlesen in ein Feld aus Records einsortiert wird. In dem Record kommen verschiedene Datentypen vor. Besagtes Feld besitzt 1200 Elemente. Der Fehler tritt immer bei einem Integerwert in Element 156 auf.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:24
Kannst du die relevanten Codeschnipsel posten, vielleicht fällt mir ja was auf, denn wenn Du an irgendeine Speichergrenze stoßen solltest, müsste das eher einen "out of memory"-Fehler verursachen und keine falschen Inhalte liefern.
  Mit Zitat antworten Zitat
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:27
Also der Fehler tritt an der folgenden Stelle auf:
Delphi-Quellcode:
for i := 0 to Zaehlung - 1 do
  begin
    AusFeld[i].iSchrank := FeldPlatz[i].SchrankNr;
    AusFeld[i].iAusschub := FeldPlatz[i].AusschubNr;
    AusFeld[i].iFach := FeldPlatz[i].FachNr;
    AusFeld[i].iTuete := FeldPlatz[i].PackNr;
    AusFeld[i].iStueckTuete := FeldPlatz[i].Stueck;
    AusFeld[i].Datum := FeldPlatz[i].Datum;

    // In diesem Abschnitt tritt der Fehler auf 14.05.2013
    if (AusFeld[i].iFach >= 0) and (AusFeld[i].iFach < 10) then
      sHelp1 := '000' + IntToStr(AusFeld[i].iFach);
    if (AusFeld[i].iFach > 9) and (AusFeld[i].iFach < 100) then
      sHelp1 := '00' + IntToStr(AusFeld[i].iFach);
    if (AusFeld[i].iFach > 99) and (AusFeld[i].iFach < 1000) then
      sHelp1 := '0' + IntToStr(AusFeld[i].iFach);
    if AusFeld[i].iFach > 999 then
      sHelp1 := IntToStr(AusFeld[i].iFach);

    if (AusFeld[i].iTuete >= 0) and (AusFeld[i].iTuete < 10) then
      sHelp2 := '0000' + IntToStr(AusFeld[i].iTuete);
    if (AusFeld[i].iTuete > 9) and (AusFeld[i].iTuete < 100) then
      sHelp2 := '000' + IntToStr(AusFeld[i].iTuete);
    if (AusFeld[i].iTuete > 99) and (AusFeld[i].iTuete < 1000) then
      sHelp2 := '00' + IntToStr(AusFeld[i].iTuete);
    if AusFeld[i].iTuete > 9999 then
      sHelp2 := IntToStr(AusFeld[i].iTuete);
    AusFeld[i].Barcode := sHelp1 + sHelp2;
  end;
Dabei ist "Zählung" die Größe des Feldes "AusFeld", mit welchem hier gearbeitet wird. Die Strings sind lokale Variablen. Das große Feld, welches ich in einem vorherigen Post erwähnte, Name "Speicher", wird hier nicht verwendet, aber dennoch verändert.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.091 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:29
Hast du einmal Bereichsüberprüfung zur Laufzeit eingeschaltet (ist zumindest in meinem RAD Studio XE2 in der Debug-Konfiguration komischerweise standardmäßig aus)? Vielleicht geht ja da etwas über den Index hinaus und verändert Daten in Strukturen, die zufälligerweise im Speicher direkt daneben liegen...
Miniaturansicht angehängter Grafiken
projektoptionen.png  
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:33
Ändert sich hiermit etwas?
for i := Low(AusFeld) to High(AusFeld) do
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Änderung einer Variablen bewirkt Änderung des Feldinhalts

  Alt 15. Mai 2013, 10:42
Interessant wäre noch der Abschnitt, indem Du die Größe des ?Array of Record? zuweist, setlength oder wie machst du das?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz