AGB  ·  Datenschutz  ·  Impressum  







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

Fehler, den ich nicht finde

Ein Thema von nailor · begonnen am 23. Mär 2003 · letzter Beitrag vom 25. Mär 2003
Antwort Antwort
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#1

Fehler, den ich nicht finde

  Alt 23. Mär 2003, 17:45
Delphi-Quellcode:
var
  Status: byte;
  Schluessel: string;
  Codefile: TFileStream;
begin
Status := 0;
if ansilowercase(LabeledEdit1.Text) = ansilowercase(LabeledEdit2.Text) then
  Status := 1;
try
  try
    Codefile := TFileStream.Create(LabeledEdit5.Text, fmOpenRead);
    VHash.Init;
    VHash.UpdateStream(Codefile, Codefile.Size);
    VHash.Final(Schluessel); {Punkt 1}
  except
    Status := 5;
  end;
finally
  Codefile.Free; {Punkt 2}
end;
Mein Problem: an Punkt 1 ist Status im Normalfall 0 (das heißt eigentlich immer), dann drück ich F8/F7 und lande an Punkt 2, dh. der except-Block wird nicht durchlaufen. Aber ab dann ist in "Status" irgend ein Schrott (also ein Wert, zwischen 0 und 255, den ich nicht rekonstruieren kann, scheint zufällig zu sein). Nach weiteren 5-10 Sekunden verabschiedet sich das Programm mit dem Hinweis von Windows, es in Kernel32.dll einen Fehler verursacht, und müsse geschlossen werden...

Hat irgendwer ne Idee?
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 23. Mär 2003, 17:50
Moin Nailor,

nur so als Idee:

Benenne mal Status um, z.B. in bStatus (b für Byte).
Die eine oder andere Klasse enthält eine Eigenschaft Status.
Eventuell kommt der der Compiler in's trudeln.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#3
  Alt 23. Mär 2003, 17:55
Nein, das ist es nicht...
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 23. Mär 2003, 17:59
Moin Nailor,

mir fällt noch etwas ein:
Passiert der Absturz auch ausserhalb der IDE?
Was wird angezeigt, wenn Du mal ein ShowMessage(IntToStr(Status)) in den finally Block einbindest?

Wenn nach dem finally Block in der Prozedur nicht mehr auf Status zugegriffen wird kann es durch aus sein, dass Status einen, mehr oder weniger, zufälligen Wert enthält, denn dann wird der Inhalt von Status ja nicht mehr gebraucht.
Eventuell legt der Compiler die Variable in ein Register, und das enthält dann "Schrott".
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#5
  Alt 23. Mär 2003, 18:08
Status wird auch nachher noch gebraucht, der kann den Wert nicht wegrationalisieren.

Ich habe aber einen anderen kleinen Fehler gefunden, ihn korrigiert, und nun geht alles: und zwar:

VHash.Final gibt keinen String zurück, sondern was untypisiertes. Ich habe es einfach in einen String geschrieben, weil ich dachte es geht dann auch in einen String. Jetzt hab ich es in einen array of byte verfrachtet und alles funktioniert.

Ich wunder mich nur, warum, wenn ich untypisierten Kram in einen String schreibe, auch andere Variablen zugemüllt werden?!?

Na ja, auf jeden Fall klappt es jetzt!
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 23. Mär 2003, 18:12
Moin Nailor,

eine Variable vom Typ String ist erst einmal auch nur ein Pointer.
Wird, wie in der Routine, dort nichts initialisiert, wird dahingeschrieben, wohin der Pointer gerade zeigt.

Du hättest wahrscheinlich auch beim Typ String bleiben können, wenn Du ihn initialisiert hättest (z.B. mit Schluessel := StringOfChar(#00,xxx)), und dann in der Form

VHash.Final(Schluessel[1]); übergeben hättest.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Help wanted?

  Alt 25. Mär 2003, 07:23
Hi Nailor!

Du willst also, dass der except -Block durchlaufen wird. Tritt aber in der zweiten try -Schleife überhaupt ein Fehler auf? Denn nur dann springt er zu except.....
  Mit Zitat antworten Zitat
Antwort Antwort


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:48 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