AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Benachrichtigung über Debugger-Exception- Problem
Thema durchsuchen
Ansicht
Themen-Optionen

Benachrichtigung über Debugger-Exception- Problem

Ein Thema von rossi37 · begonnen am 11. Dez 2011 · letzter Beitrag vom 11. Dez 2011
Antwort Antwort
rossi37

Registriert seit: 11. Dez 2011
3 Beiträge
 
#1

Benachrichtigung über Debugger-Exception- Problem

  Alt 11. Dez 2011, 18:44
Hi,
zu Beginn erstmal ein Hallo ans Forum, bin neu hier!
Ich bin wirklich ein totaler Anfänger im Programmieren, von daher kann es sien, dass mein Problem für euch lächerlich oder so erscheint, aber ich kriege es einfahc nicht auf die Reihe.

Also wir sollen im Informatik-Unterricht mit delphi, ein Programm mit heapsort-Sortierverfahren erstellen.

Ich habe echt keine Ahnung, ob mein Programm so wie ich es da zusammengeschrieben habe Sinn macht, aber ich zeig es euch mal.

Code:
unit heapsort_verfahren_u;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  Theapsort = class(TForm)
    mAusgabe: TMemo;
    btnZahlen: TButton;
    btnSortieren: TButton;
    procedure btnZahlenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnSortierenClick(Sender: TObject);
    procedure refillMemo();



  private
    i: integer;
    Data: array of integer;
    procedure sortierverfahren(Data: array of integer);
    procedure Erstelleheap(i: integer; Data: array of integer; knot: integer);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  heapsort: Theapsort;

implementation

{$R *.dfm}

procedure Theapsort.FormCreate(Sender: TObject);
begin
 SetLength(Data,1);
end;



procedure Theapsort.btnSortierenClick(Sender: TObject);
begin
sortierverfahren(Data);
refillMemo();
end;

procedure Theapsort.btnZahlenClick(Sender: TObject);
var
c, zahl,i: integer;
begin
for c:=0 to 10 do
begin
randomize;
zahl:=random(100)+1;
SetLength(Data, Length(Data)+1);
i:=i+1;
Data[i]:=zahl;
refillMemo();
end;
end;

procedure Theapsort.sortierverfahren(Data: array of integer);
var
 knot, temp, i: integer;
begin
  i:= Length(Data);

  knot:= i div 2;
  while knot > 0 do
  begin
    dec(knot);
    Erstelleheap(i, Data, knot);
  end;

  while i >= 0 do
  begin
    temp:= Data[0];
    Data[0]:= Data[i];
    Data[i]:= temp;

    Erstelleheap(i,Data, 0);
    Dec(i);
  end;
end;

procedure Theapsort.Erstelleheap(i: integer; Data: array of integer; knot: integer);
var
 temp_knot_value, subknot: integer;
begin
  temp_knot_value := Data[knot];

  while knot < i div 2 do
  begin
  subknot := 2*knot+1;

  if (subknot < i-1) and (Data[subknot]< Data [subknot +1])
    then Inc(subknot);

  if temp_knot_value >= Data[subknot]
    then break;

  Data[knot]:= Data[subknot];

  end;
  Data[knot]:= temp_knot_value;
end;



procedure Theapsort.refillMemo();
var
a:Integer; Data: Array of integer;
begin
mAusgabe.Text:='';
for a:= 1 to Length(Data)-1 do
  begin
  mAusgabe.text:= mAusgabe.Text + Inttostr(Data[a])+#13#10;
  end;
end;

end.
Aufjedenfall bekomme ich, wenn ich den Debugger starten will, die Meldung:
"Im Projekt heapsort_verfahren.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung 'Zugriffsverletzung bei Adresse 0044FD2E in Modul 'heapsort_verfahren.exe'. Schreiben von Adresse 00E1030C'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen."

Woran könnte das liegen, ich vermute mal und hoffe, dass ihr mir sagen könnt wo der Fehler ist.

Grüße,
rossi37
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Benachrichtigung über Debugger-Exception- Problem

  Alt 11. Dez 2011, 19:30
Und in welcher Zeile tritt das auf?
Lars
  Mit Zitat antworten Zitat
rossi37

Registriert seit: 11. Dez 2011
3 Beiträge
 
#3

AW: Benachrichtigung über Debugger-Exception- Problem

  Alt 11. Dez 2011, 20:17
procedure btnZahlenClick
...

Data[i]:=zahl;
da wirds mir angezeigt.

aber da wurde schonmal gemeckert weil Variable Data und i nicht initialisiert werden konnten. (?)

tut mir leid ich hab' echt keine Ahnung von Delphi!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Benachrichtigung über Debugger-Exception- Problem

  Alt 11. Dez 2011, 20:56
Hallo,

zahl:=random(100)+1;
zahl zwischen 1 und 100

SetLength(Data, Length(Data)+1);
Länge von data um 1 erhöhen (im FormCreate wurde es auf 1 gesetzt)

i:=i+1;
i um 1 erhöhen
Welchen Wert hat denn i vor dieser Zeile ???
Der Wert ist unbekannt (lokale Variablen haben keinen Default-Wert)

Data[i]:=zahl;

Zugriff auf ... tja worauf denn ?



Heiko
Heiko
  Mit Zitat antworten Zitat
rossi37

Registriert seit: 11. Dez 2011
3 Beiträge
 
#5

AW: Benachrichtigung über Debugger-Exception- Problem

  Alt 11. Dez 2011, 21:05
Hallo,

zahl:=random(100)+1;
zahl zwischen 1 und 100
ich dachte so kann ich einfahc mal zufallszahlen erstellen, ovn 1 - 100?! Ich soll das ganze ja präsentieren und brauch doch irgendwie einfahc mal Zahlen, also dachte ich mir so.


SetLength(Data, Length(Data)+1);
Länge von data um 1 erhöhen (im FormCreate wurde es auf 1 gesetzt)

i:=i+1;
i um 1 erhöhen
Welchen Wert hat denn i vor dieser Zeile ???
Der Wert ist unbekannt (lokale Variablen haben keinen Default-Wert)

Data[i]:=zahl;

Zugriff auf ... tja worauf denn ?
könntest du mir hier evtl. noch ein paar Lösungsansätze mit auf den Weg geben?

Danke,
rossi37
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.068 Beiträge
 
Delphi 12 Athens
 
#6

AW: Benachrichtigung über Debugger-Exception- Problem

  Alt 11. Dez 2011, 23:48
In welcher Quellcodezeile kommt der Fehler?
Arg, faule RedBox und ich sollte nebenbei mich nicht zu lange ablenken lassen.


Randomize ruft man nur einmal auf und nicht mehrmals (steht auch in der OH).

Die Codeformatierung ist grauenhaft.

PS: das [DELPHI]-Tag ist schöner, als das [CODE]-Tag.

Tipp: Schalte mal die Indexprüfung an, in den Projektoptionen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 07:44 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