Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Ich verstehe es einfach nicht...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ]
000
25.08.2006, 22:30 Uhr
Yadgar



High!

Jetzt frickel ich schon seit einem Monat an "YIP" herum, habe diverse Abbruchbedingungen für die Einleseschleife probiert, bin vorhin sogar noch auf einen echten Fehler gestoßen (der Zähler für die eingelesenen Pixel wurde nirgendwo initialisiert) - aber trotzdem gilt nach wie vor: neu erstellte TGAs werden anstandslos vollständig eingelesen, bei TGAs, die aus PNGs konvertiert wurden, bricht der Einlesevorgang völlig unmotiviert irgendwann ab... das gilt sogar dann, wenn der Inhalt eines solchen durch Konvertierung entstandenen TGAs in ein "frisches" TGA kopiert wird!

Ich weiß wirklich nicht mehr mehr weiter... bin ich vielleicht doch zu dumm zum Programmieren und sollte besser Treppenhäuser putzen, Hunde ausführen oder Zeitungen austragen?

Wen es interessiert: hier ist der Code:
http://home.arcor.de/yadgar/photos/yip.cpp

...und das TGA-Testfile:
http://home.arcor.de/yadgar/photos/count2.tga

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog

Dieser Post wurde am 25.08.2006 um 22:31 Uhr von Yadgar editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.08.2006, 22:53 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Schonmal mit nem Debugger an die Sache rangegangen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.08.2006, 22:53 Uhr
kronos
Quotenfisch
(Operator)


Auf alle Fälle bist du scheinbar zu faul zum Debuggen zum Programmieren.
Programm zerlegen und Teilfunktionen prüfen, zeilenweise durchtesten wo er aussteigt bzw. ab wo die Variablenwerte nicht mehr stimmen, Fehler eingrenzen und eliminieren.
Aber das hatten wir doch schonmal!
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.08.2006, 23:22 Uhr
~Blubber2063
Gast


Tjo du solltest den Code vor allem mal neu schreiben, das hilft oft, außerdem kannst du das dann gleich modularisieren und die Finger von sowas wie goto lassen, das ist ja nun ganz übel.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.08.2006, 23:42 Uhr
Yadgar



High!


Zitat von ~Blubber2063:
und die Finger von sowas wie goto lassen, das ist ja nun ganz übel.


Klar ist das schlechter Stil, weil BASIC-Spaghetticode... aber wie soll ich sonst über mehrere Schachtelungsebenen aus einer Schleife herausspringen? Für jede Ebene ein Flag definieren und im Falle von false eine Ebene weiter herausspringen kommt mir auch nicht gerade elegant vor!

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.08.2006, 23:48 Uhr
Yadgar



High!


Zitat von kronos:
Auf alle Fälle bist du scheinbar zu faul zum Debuggen zum Programmieren.
Programm zerlegen und Teilfunktionen prüfen, zeilenweise durchtesten wo er aussteigt bzw. ab wo die Variablenwerte nicht mehr stimmen, Fehler eingrenzen und eliminieren.
Aber das hatten wir doch schonmal!


Das habe ich vorhin versucht... ich stelle wie im Hilfstext empfohlen unter Compileroptionen/Linker "Fehlersuchinformationen generieren" ein, starte den Debugger, und was sehe ich... richtig, einen Bluescreen! DEV-C++ kackt darauf hin sang- und klanglos ab... wirklich toll sowas! Zur Information: ich verwende Windows 98... habe aber werktags auch Zugang zu einem XP-Rechner...

Wie gesagt, der Fehler kann nur in dieser Einleseschleife mit input.get(ch) liegen... und da es ja mit neu erzeugten TGAs einwandfrei funktioniert, muss es irgendwie an den Daten liegen! Aber selbst wenn ich mir die Grafikfiles mit einem Hexmonitor ansehe, finde ich beim besten Willen nichts irgendwie Verdächtiges!

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.08.2006, 00:11 Uhr
~Blubber2063
Gast


Also, erstmal hab ich mal kurz hier auf das Dateiformat geschaut: http://de.wikipedia.org/wiki/Targa_Image_File und wenn ich mich nicht verrechnet habe dann liest du 1 byte zu wenig vom Header, denn ich komme auf 18Byte für den header. Dann ist das mit dem debugger dumm gelaufen, evtl. mal neu installieren oder nen anderen nehmen. Und falls es dir möglich ist würde ich alles vor xp es sei denn es ist nt nach möglichkeit meiden, weil es da keinen Speicherschutz gibt und damit fast jeder Absturz eines Programms das BS mitreisst, ist nicht so toll.

So nun noch mal zum debuggen, wenn du damit solche Probleme hast man kommt auch ohne Debugger gut vorran, wenn man sich debug ausgaben in ein log schreibt, also alle wichtigen Variablen mal jeweils sichert, so kommst du auch weiter und wie gesagt was ich dir dringend ans Herz legen würde ist den Code neuschreiben, jetzt kennst du ein paar Fehlerquellen und du kannst dem ganzen ne bessere Struktur geben, sind ja schließlich weniger als 1000 Zeilen Code, grade die Modularisierung würde hier die Übersicht verbessern. Ah ja und das immer bis zum Ende lesen ist natürlich auch doof, falls da ein Dateifuss existiert und damit noch Metainformationen vorhanden sind.

Wegen den Gotos also das in void Image::pDisplay(void) löst du einfach durch die Schleifkontrollanweisung break, 2x dann bist du aus beiden schleifen raus, oder du schreibst einfach return, wenn du die Methode eh verlassen willst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.08.2006, 01:12 Uhr
~Blubber2063
Gast


So hab noch mal kurz über deinen Code geschaut und da sind mir noch ein paar mögliche Fehlerquellen ins Auge gesprungen, du wertest weder aus ob das Bild komprimiert ist noch, welche Farbtiefe etc. Du wertest den Header nicht vollständig aus, obwohl da einige Dinge durchaus wichtig wären. Schau dir mal die Spezifikationen noch mal genau an. Spontan würde ich aber tippen du hast die Headerfelder nicht ausreichend oder richtig ausgewertet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
28.08.2006, 01:57 Uhr
Yadgar



High!


Zitat von ~Blubber2063:
So hab noch mal kurz über deinen Code geschaut und da sind mir noch ein paar mögliche Fehlerquellen ins Auge gesprungen, du wertest weder aus ob das Bild komprimiert ist noch, welche Farbtiefe etc. Du wertest den Header nicht vollständig aus, obwohl da einige Dinge durchaus wichtig wären. Schau dir mal die Spezifikationen noch mal genau an. Spontan würde ich aber tippen du hast die Headerfelder nicht ausreichend oder richtig ausgewertet.


Das Programm verhält sich völlig unberechenbar... die ersten 17 konvertierten 1409x1403er TGAs, die ich überhaupt damit bearbeitet habe, wurden korrekt eingelesen, dann trat erstmals der Fehler auf (und zwar genau bei jener Datei, die ich auf meinem Webspace abgelegt habe) - seither klappt es mit den großen konvertierten TGAs überhaupt nicht mehr, sehr wohl aber mit gleich großen (oder sogar größeren) neu erzeugten TGAs. Was ebenfalls nicht funktioniert, ist den Inhalt der PNGs in ein neu angelegtes Bild zu kopieren und dieses dann als TGA abzuspeichern; interessanterweise werden aber kleinere Ausschnitte aus den PNGs, die als TGA gespeichert wurden, korrekt gelesen, wobei die Obergrenze für fehlerfreies Lesen irgendwo zwischen 450000 und 700000 Pixeln liegt.

Was eine etwaige Kompression angeht: sämtliche TGAs wurden von mir ausdrücklich als nicht komprimiert abgespeichert. Die Farbtiefe lese ich in Byte 16 aus und verwende die daraus errechnete Bytezahl als Divisionswert für die Modulo-Division, deren Ergebnis in einer switch-Anweisung verzeigt... ich weiß wirklich nicht mehr weiter, ich spiele bereits mit dem Gedanken, das ganze Projekt hinzuschmeißen und mich damit abzufinden, dass ich halt nicht das Zeug zum Programmierer habe, die Umschulung abzubrechen und mich von der Arbeitsagentur auf die Spargelfelder schicken zu lassen... ich bin anscheinend gemessen an den Anforderungen der IT-Welt schlichtweg geistig minderbemittelt!

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog

Dieser Post wurde am 28.08.2006 um 02:03 Uhr von Yadgar editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
28.08.2006, 02:13 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)



Zitat von Yadgar:
ich weiß wirklich nicht mehr weiter, ich spiele bereits mit dem Gedanken, das ganze Projekt hinzuschmeißen und mich damit abzufinden, dass ich halt nicht das Zeug zum Programmierer habe, die Umschulung abzubrechen und mich von der Arbeitsagentur auf die Spargelfelder schicken zu lassen... ich bin anscheinend gemessen an den Anforderungen der IT-Welt schlichtweg geistig minderbemittelt!


Du bist als Programmierer wirklich nicht geeignet. Total ungeeignet. Also ich mein komplett, das mit den Spargelfeldern war gar keine schlechte Idee ....
Aber der Grund dafür ist genau diese Einstellung !
Ganz ehrlich, man kann nur ein vernünftiges Projekt beginnen, wenn man eine Programmiersprache und eben ein Themengebiet (bei dir TGA) wirklich aus dem Schlaf kann.Ich denke, du hast einfach etwas zu hoch gegriffen ... Schau dir die Sourcen von irgendetwas an, das etwas ähnliches macht wie dein Projekt tun soll und lerne sie zu verstehen. Dann übergeh dein Projekt nochmal, schon wirst du mehr erfolg haben.

Und nochwas. Wenn du ein Projekt und nicht nur ein kleines privates Snippet draus machen willst, dann werte alles aus, damit auch andere mit deinem Source etwas anfangen können !
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: