Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 04:37

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Fehler mit CPUWindow
BeitragVerfasst: Mi Feb 12, 2003 20:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Hi,

ich hab ein kleines Programm geschrieben, dass Codes für Toneditoren von Nokiahandys (von zB. <a href='http://www.adir.de/' target='_blank'>http://www.adir.de/</a> ) zu normalem Text, Soundausgabe und Notenliniensystem verarbeiten soll.
Alles kein Problem, hab ich mir gedacht und gecodet. Jetzt steh ich vor einem Problem... anscheinend funktioniert die Sache, aber aus irgendeinem Grund zerreißts ihn, nach ein paar Abfragen, mit einem CPU Window und ich habe momentan keine Ahnung woran das liegen könnte.
Wenn also jemand so nett sein könnte und sich mein Programm <a href='http://encorex.no-ip.com/hosted_sites/bluetoby/ext/NokiaT.zip' target='_blank'> hier </a> anschauen könnte?
Vielen Dank im Vorraus ! ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 12, 2003 20:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Oja...da sollte wohl jemand etwas Nachhilfe in Sachen Object Pascal suchen :wink:

Mir ist nämlich direkt folgende, typische Bereichsverletzung aufgefallen, dein Code :
Code:
  1.  
  2.  
  3. for NumCount := 0 to Length(Nums) do
  4.  
  5.  

Du gehst mit deiner Schleife ein Element zu weit, was dann zu dieser Fehlermeldung führt.Richtig muß es so aussehen :
Code:
  1.  
  2.  
  3. for NumCount := 0 to Length(Nums)-1 do
  4.  
  5.  


Wenn du unter den Compileroptionen die Bereichsprüfung aktiviert hättest, hättest du dir das Posting sparen können, denn dann hätte dir der Compiler nämlich gesagt das du an dieser (und einigen anderen Stellen) die Bereiche überschreitest.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 12, 2003 21:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Hupsala, das hatte ich jetzt ganz vergessen noch einzufügen.... :roll: :oops:
Wo finde ich denn die Compileroptionen? Unter "Environment-" und "Debuggeroptions" finde ich nichts... :oops:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 12, 2003 21:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Also bei mir kommt der gleiche Fehler immernoch, auch wenn ich bei beiden Schleifen(
Code:
  1.  
  2.  
  3.  for NumCount := 0 to Length(Nums)-1 do
  4.  
  5.  for Down := 0 to CurL-1s do
  6.  
  7.  

) das -1 ergänzt habe...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 12, 2003 22:31 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hi,

also die beiden Schleifen hast Du schon korrigiert. Der nächste Fehler steckt in der Funktion TuneCreate:
Code:
  1.  
  2.  
  3. procedure TForm1.TuneCreate(COctave, CTune, CLength: Integer);
  4.  
  5. begin
  6.  
  7.  inc(CurL,1);
  8.  
  9.  SetLength(Tunes, CurL); // Aktuelle Länge
  10.  
  11.  Tunes[CurL].Octave := COctave;
  12.  
  13.  Tunes[CurL].Tune := CTune;
  14.  
  15.  Tunes[CurL].Length := CLength;
  16.  
  17.  if not PointNext then
  18.  
  19.  &nbsp;Tunes[CurL].Pointed := Let // kein Point Next = nich punkten
  20.  
  21.  else
  22.  
  23.  begin
  24.  
  25.  &nbsp;Tunes[CurL].Pointed := Point; // punkten
  26.  
  27.  &nbsp;PointNext := False; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // clear
  28.  
  29.  end;
  30.  
  31. end;
  32.  
  33.  


Die must diese wie folgt umschreiben:

Code:
  1.  
  2.  
  3. procedure TForm1.TuneCreate(COctave, CTune, CLength: Integer);
  4.  
  5. begin
  6.  
  7.  SetLength(Tunes, CurL + 1); // Aktuelle Länge
  8.  
  9.  Tunes[CurL].Octave := COctave;
  10.  
  11.  Tunes[CurL].Tune := CTune;
  12.  
  13.  Tunes[CurL].Length := CLength;
  14.  
  15.  if not PointNext then
  16.  
  17.  &nbsp;Tunes[CurL].Pointed := Let // kein Point Next = nich punkten
  18.  
  19.  else
  20.  
  21.  begin
  22.  
  23.  &nbsp;Tunes[CurL].Pointed := Point; // punkten
  24.  
  25.  &nbsp;PointNext := False; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // clear
  26.  
  27.  end;
  28.  
  29.  inc(CurL,1);
  30.  
  31. end;
  32.  
  33.  


Du hast zuerst den Zähler um 1 erhöht, und greifst mit dem neuen Wert als Index zu. Dabei fängt deine Liste mit der unteren Grenze 0 und nicht mit 1 an.

War trickreich, bin zuerst auch darauf reingefallen und habe den Fehler in der Funktion Decode gesucht.

KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 13, 2003 06:41 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Wenn das Inc unten steht, will er mich immernoch nicht mit
"cmp dword ptr [edi+ecx*4+$04] $00" in Ruhe lassen.
Lasse ich es weg, sehe ich kein Output.... :cry:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 13, 2003 18:30 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hast Du auch SetLength(Tunes, CurL); in SetLength(Tunes, CurL + 1); geändert?

Ich sende dir meine Änderungen so gegen 20:00 zu. In der ersten Seite tauchen bei mir pro Zahl ein Eintrag auf.

KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 13, 2003 19:44 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Mein Code ist mit deinem identisch, aber wenn man mal wirkliche Codes von www.adir.de wie zB.
Code:
  1. (1)88*# 09 08 79** 5# (7)8 09 08 (5)# 08 4999# 088 5888# 7 09 79 58# 799 (1)88*# 09999 0999 0 58**# 0 59# 79 (1)8*# 09 08 79** 5# 78 09 0 59# (4)9# 0 588# (7) 0 08 79 58# 799 (1)88*# 09999 0999 0

und sich im Debugmode befindet, gibts den Fehler... außerdem funktioniert so was wie 1* oder 1** nicht, was eigentlich C 2. Oktave, bzw. C 3. Oktave ergeben müsste... :cry:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 13, 2003 19:51 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Stimmt, ich hatte den Fehler zuerst nur mit Zahlen produziert und daher nur mit diesen getestet. Mal sehen was ich finde.

KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 13, 2003 20:25 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Das Problem hat sich in die Funktion TuneEdit verschoben. Wenn CurL 2 ist, dann ist Tunes[2] ein Verletzung der Grenzen, da die Genze von 0..1 sind.

Code:
  1.  
  2.  
  3. procedure TForm1.TuneEdit(EOctave, ETune, ELength: Integer);
  4.  
  5. var
  6.  
  7.  &nbsp;tCurl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: Integer;
  8.  
  9. begin
  10.  
  11.  &nbsp;tCurL := CurL - 1;
  12.  
  13.  
  14.  
  15.  &nbsp;// Ersetze CurL durch tCurL
  16.  
  17.  if Tunes[tCurL].Octave <> Oc3 then // Wenn nicht Oktave 3
  18.  
  19.  &nbsp;Tunes[tCurL].Octave := Tunes[tCurL].Octave + EOctave
  20.  
  21.  else
  22.  
  23.  &nbsp;Tunes[tCurL].Octave := Oc1; // sonst 1
  24.  
  25.  if (Tunes[tCurL].Tune <> E) and (Tunes[tCurL].Tune <> B) and
  26.  
  27.  &nbsp;(Tunes[tCurL].Tune <> Cis) and (Tunes[tCurL].Tune <> Dis) and
  28.  
  29.  &nbsp;(Tunes[tCurL].Tune <> Fis) and (Tunes[tCurL].Tune <> Gis) and
  30.  
  31.  &nbsp;(Tunes[tCurL].Tune <> Ais) then
  32.  
  33.  &nbsp;Tunes[tCurL].Tune := Tunes[tCurL].Octave + ETune // Normalstatus
  34.  
  35.  else if (Tunes[tCurL].Tune <> E) and (Tunes[tCurL].Tune <> B) then
  36.  
  37.  &nbsp;Tunes[tCurL].Tune := Tunes[tCurL].Octave - ETune // Wenn # schon vergeben
  38.  
  39.  else if (Tunes[tCurL].Length = L1) and (ELength = Plus) then
  40.  
  41.  &nbsp;Tunes[tCurL].Length := L32
  42.  
  43.  else if (Tunes[tCurL].Length = L32) and (ELength = Minus) then
  44.  
  45.  &nbsp;Tunes[tCurL].Length := L1
  46.  
  47.  else
  48.  
  49.  &nbsp;Tunes[tCurL].Length := Tunes[tCurL].Length + ELength; // Länge
  50.  
  51.  TempO := Tunes[tCurL].Octave; &nbsp; // Temp
  52.  
  53.  if ETune <> P then
  54.  
  55.  &nbsp;TempL := Tunes[tCurL].Length; &nbsp;// No P = No Temp!
  56.  
  57. end;
  58.  
  59.  


Es gibt jetzt keinen Fehler mehr, wenn ich z. B. 1#*(5)*2*3#)*1949732945385#1*5 eingebe.

KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 13, 2003 20:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Jo, jetzt funktionierts prächtig...
nur leider wirds nicht richtig nach dem Schema
"1. Oktave / C / Viertelnote (4) / Zeilenumbruch" angezeigt, sondern irgendwie anders...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 13, 2003 20:42 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Kann sein, aber das kann ich nicht prüfen. Habe von dem Schema keine Ahnung.

KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 13, 2003 20:52 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Ahhh... das casen hat nicht funktioniert weil eine if-Abfrage ein else davor hatte, wo keins seins sollte, bei einer if-Abfrage das and-Statement gefehlt hat und die Addition von Plus und Minus nicht gut festgelegt war
(statt Plus = 1 und Minus = -1 war Plus = -1 und Minus = -2....)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 13, 2003 21:13 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Einfache Frage? Wofür soll das sein?

KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 13, 2003 21:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Jetzt funktioniert fast alles, nur bei einem * oder # wird der direkte Ton (zB. C oder D) danach nicht angezeigt, sondern ein leere Lücke gelassen. Download is updated)... ich entdeck den verdammten Bug nicht.... :cry:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]