App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Die größten Dummheiten die ihr gemacht habt
- Ersteller i_hasser
- Erstellt am
Hab gedacht den Thread gibts schon, ging aber nur um schlimme Hacks.
Im gegensatz zu dem hier sind Hacks wenigstens irgendwie noch produktiv.
Also ich mach mal den Anfang: Hab mich gerade eine halbe Stunde nach einem Bug totgesucht.
fstream->read() hat mir auf Teufel komm raus keine Daten ausgelesen. Egal wohin ich das gelesen hab, immer stand 0 da. Die Länge des zu lesenden Abschnittes hab ich auch testweise manuell vorgegeben, ich hab sogar einen NULL Pointer als Ziel angegeben (sprich sowie da auch nur ein Byte hingelesen wird macht das Prog einen abflug).
Nix. Lief immer scheinheilig durch, gelesen wurde garnix. Geöffnet hatte ich die Datei mit "ios:ut | ios::in | ios::binary".
Irgendwann hab ich dann festgestellt, dass die Datei inzwischen leer war . Keine Ahnung wieso, aber irgendwie muss ich das zum Testen mal ohne ios::binary geöffnet haben, und schwupps war sie leer.
Das hätte ich ja auch noch halbwegs früh gemerkt, wenn ich nicht vorher vergessen hätte den Puffer auf 0 zu initialisieren, und so war der Puffer immer voll mit Müll (als ich den Fehler gemerkt hab, hab ich den Puffer auf 0 initialisiert und von da an stand nur noch 0 im Puffer).
Eine halbe Stunde ist eigentlich untertrieben, das dürfte inzwischen eine Stunde sein...
Im gegensatz zu dem hier sind Hacks wenigstens irgendwie noch produktiv.
Also ich mach mal den Anfang: Hab mich gerade eine halbe Stunde nach einem Bug totgesucht.
fstream->read() hat mir auf Teufel komm raus keine Daten ausgelesen. Egal wohin ich das gelesen hab, immer stand 0 da. Die Länge des zu lesenden Abschnittes hab ich auch testweise manuell vorgegeben, ich hab sogar einen NULL Pointer als Ziel angegeben (sprich sowie da auch nur ein Byte hingelesen wird macht das Prog einen abflug).
Nix. Lief immer scheinheilig durch, gelesen wurde garnix. Geöffnet hatte ich die Datei mit "ios:ut | ios::in | ios::binary".
Irgendwann hab ich dann festgestellt, dass die Datei inzwischen leer war . Keine Ahnung wieso, aber irgendwie muss ich das zum Testen mal ohne ios::binary geöffnet haben, und schwupps war sie leer.
Das hätte ich ja auch noch halbwegs früh gemerkt, wenn ich nicht vorher vergessen hätte den Puffer auf 0 zu initialisieren, und so war der Puffer immer voll mit Müll (als ich den Fehler gemerkt hab, hab ich den Puffer auf 0 initialisiert und von da an stand nur noch 0 im Puffer).
Eine halbe Stunde ist eigentlich untertrieben, das dürfte inzwischen eine Stunde sein...
Sargnagel
Commodore Special
- Mitglied seit
- 31.12.2001
- Beiträge
- 477
- Renomée
- 1
Ich hatte mal einen ganzen Tag lang nach dem Grund für einen Ausnahmefehler gesucht - damals noch ohne Debugger.
Nachdem ich fast den gesamten Sourcecode (ca. 2.500 Zeilen) mittels printf()'s gecheckt hatte, stieß ich endlich auf den Fehler: eine nicht initialisierte Variable, die als Zähler/Index in einer for-Schleife verwendet wurde.
Das gute daran war, daß ich mir nach dieser Mammutaktion sicher sein konnte, daß das gesamte Programm nun fehlerfrei war ... ... aber zu welchem Preis?
Nachdem ich fast den gesamten Sourcecode (ca. 2.500 Zeilen) mittels printf()'s gecheckt hatte, stieß ich endlich auf den Fehler: eine nicht initialisierte Variable, die als Zähler/Index in einer for-Schleife verwendet wurde.
Das gute daran war, daß ich mir nach dieser Mammutaktion sicher sein konnte, daß das gesamte Programm nun fehlerfrei war ... ... aber zu welchem Preis?
hab ich zwar nicht selber gemacht, aber trotzdem sehr lustig.
Bei einem Betriebssysteme-Praktikum hat eine andere Gruppe diesen lustigen Code fabriziert
while(1)
{
fork()
...
}
Naja, kurze Zeit später stand der Rechner...
Bei einem Betriebssysteme-Praktikum hat eine andere Gruppe diesen lustigen Code fabriziert
while(1)
{
fork()
...
}
Naja, kurze Zeit später stand der Rechner...
Devastators
Grand Admiral Special
- Mitglied seit
- 03.06.2001
- Beiträge
- 17.242
- Renomée
- 149
- Standort
- Bochum
- Mein Laptop
- Acer 8730 & 3810T & VN7 791G
- Prozessor
- Intel Q9550
- Mainboard
- -
- Kühlung
- Arctic Freezer 7 Pro
- Speicher
- 4* 1 Gig DC
- Grafikprozessor
- Asus GTX 750TI
- Display
- Asus VW246H 24" FHD
- SSD
- Samsung 850 EVO
- HDD
- 2 * Sata Maxtor 200GB 1 * WD 250 Gig IDE
- Optisches Laufwerk
- Plextor PX750A
- Soundkarte
- -
- Gehäuse
- Antec P180
- Netzteil
- BeQuiet 450Watt Straight Power
- Betriebssystem
- Win7 64
- Webbrowser
- IExplorer 8
- Verschiedenes
- DigiCam: Canon EOS 300D, Canon 50D , Beamer: SanyoZ3 , Camcorder: Canon HF200 HD , PS3 , Wii
habe ich hier nicht letztens gelesen..
for (i = 0; i == 10; i++)
8)
for (i = 0; i == 10; i++)
8)
hmmm mal überlegen... es mangelt bei mir ja nicht an solchen Dummheiten, nur kann ich mich nicht mehr daran erinnern .
Hab mal was schönes gelesen. War Assembler... da hatte jemand beim Wechseln in den PM nicht alle Segmentregister initialisiert. Ansich ist das kein Problem. Dumm nur, dass er dann irgend eine Funktion aufgerufen hat. Da werden die Register alle gesichert (auch kein Problem) und dann wieder hergestellt (schon ein Problem) - bei jedem Schreibzugriff in ein Segmentregister wird geprüft, ob der Wert auch gültig ist, war er natürlich nicht. Ergo gabs eine Exception - ohne Exception Handler ist eine Exception aber auch nicht das wahre, weil die Kiste dann einfach neustartet.
Sprich man hat vielleicht in Zeile 100 in den PM gewechselt, dann 5000 Codezeilen geschrieben (in Assembler geht das ganz fix) und auf einmal schmiert die Kiste da ab, weil in Zeile 100 das Segmentregister nicht initialisiert wurde.
Tja, ab und zu hab ich die Eigenschaft bei for-Schleifen das '==' mit einem '=' zu vertauschen. Das kommt aber nur daher weil ich vor einer Weile gezwungen war ein Delphi Prog zu schreiben. Glücklicherweise meckert da auch der gcc rum.
Aber allgemein macht es Spaß fehler in Assembler zu suchen. Hab ich auch schon hinter mir - allerdings war das ein Bootstrap, also nix mit debuggen. Nichtmal Zahlen konnte ich ausgeben.
Hab dann praktsich sowas wie Haltepunkte genommen - einfach an bestimmten Stellen ein paar Sonderzeichen auf den Moni .
Hab mal was schönes gelesen. War Assembler... da hatte jemand beim Wechseln in den PM nicht alle Segmentregister initialisiert. Ansich ist das kein Problem. Dumm nur, dass er dann irgend eine Funktion aufgerufen hat. Da werden die Register alle gesichert (auch kein Problem) und dann wieder hergestellt (schon ein Problem) - bei jedem Schreibzugriff in ein Segmentregister wird geprüft, ob der Wert auch gültig ist, war er natürlich nicht. Ergo gabs eine Exception - ohne Exception Handler ist eine Exception aber auch nicht das wahre, weil die Kiste dann einfach neustartet.
Sprich man hat vielleicht in Zeile 100 in den PM gewechselt, dann 5000 Codezeilen geschrieben (in Assembler geht das ganz fix) und auf einmal schmiert die Kiste da ab, weil in Zeile 100 das Segmentregister nicht initialisiert wurde.
Tja, ab und zu hab ich die Eigenschaft bei for-Schleifen das '==' mit einem '=' zu vertauschen. Das kommt aber nur daher weil ich vor einer Weile gezwungen war ein Delphi Prog zu schreiben. Glücklicherweise meckert da auch der gcc rum.
Aber allgemein macht es Spaß fehler in Assembler zu suchen. Hab ich auch schon hinter mir - allerdings war das ein Bootstrap, also nix mit debuggen. Nichtmal Zahlen konnte ich ausgeben.
Hab dann praktsich sowas wie Haltepunkte genommen - einfach an bestimmten Stellen ein paar Sonderzeichen auf den Moni .
Devastators
Grand Admiral Special
- Mitglied seit
- 03.06.2001
- Beiträge
- 17.242
- Renomée
- 149
- Standort
- Bochum
- Mein Laptop
- Acer 8730 & 3810T & VN7 791G
- Prozessor
- Intel Q9550
- Mainboard
- -
- Kühlung
- Arctic Freezer 7 Pro
- Speicher
- 4* 1 Gig DC
- Grafikprozessor
- Asus GTX 750TI
- Display
- Asus VW246H 24" FHD
- SSD
- Samsung 850 EVO
- HDD
- 2 * Sata Maxtor 200GB 1 * WD 250 Gig IDE
- Optisches Laufwerk
- Plextor PX750A
- Soundkarte
- -
- Gehäuse
- Antec P180
- Netzteil
- BeQuiet 450Watt Straight Power
- Betriebssystem
- Win7 64
- Webbrowser
- IExplorer 8
- Verschiedenes
- DigiCam: Canon EOS 300D, Canon 50D , Beamer: SanyoZ3 , Camcorder: Canon HF200 HD , PS3 , Wii
if(strcpy(text1, text1) == 0)
.....
hat gut eine Stunde gedauert bis mein Kollege die richtige Funktion strcmp() benutzt hatte War das ein Spass danach
oder sehr nervig gewesen:
char * text = "das ist ein Test";
char * text_hilf;
text_hilf = text;
und dann irgendwo im Programm wo man nicht mehr drüber nachgedacht hat...
strupr(text_hilf);
ich dachte schon der debugger sei am spinnen gewesen...
.....
hat gut eine Stunde gedauert bis mein Kollege die richtige Funktion strcmp() benutzt hatte War das ein Spass danach
oder sehr nervig gewesen:
char * text = "das ist ein Test";
char * text_hilf;
text_hilf = text;
und dann irgendwo im Programm wo man nicht mehr drüber nachgedacht hat...
strupr(text_hilf);
ich dachte schon der debugger sei am spinnen gewesen...
Ich nehm eigentlich auch ganz gerne die while(1) {..} Schleifen. Glaub das war der Sortieralgorithmus - der hat in der Schleife eben eine verkettete Liste immer weiter verlängert (-> sprich da war auch ein malloc dabei) und sollte aufhören, wenn er fertig sortiert hat (per break.
Irgendwie hat letzteres nicht ganz geklappt, und das kleine Gigabyte Ram war innerhalb von einer Sekunde voll. Dann hat die Platte rumgerödelt - natürlich konnte ich die Sache so schnell nicht mehr abbrechen. Das laden vom KDE Sys Guard hat schätzungsweise 10 Sekunden gedauert (in der Zeit hat das Prog natürlich fröhlich weiter Speicher reserviert). 3 Sekunden später hab ich das Ding dann gekillt.
Die nächste Zeit hat die HDD bei jedem noch so kleinen Klick Arbeit bekommen. Der RAM war direkt nachdem ich das Prog gekickt hatte nur mit 100mb oder so belegt - bei laufendem KDE, Mozilla, Konquerer, KDevelop und haufenweise Terminals.
Momentan ist ähnlich viel offen, da braucht er 250MB Ram .
Irgendwie hat letzteres nicht ganz geklappt, und das kleine Gigabyte Ram war innerhalb von einer Sekunde voll. Dann hat die Platte rumgerödelt - natürlich konnte ich die Sache so schnell nicht mehr abbrechen. Das laden vom KDE Sys Guard hat schätzungsweise 10 Sekunden gedauert (in der Zeit hat das Prog natürlich fröhlich weiter Speicher reserviert). 3 Sekunden später hab ich das Ding dann gekillt.
Die nächste Zeit hat die HDD bei jedem noch so kleinen Klick Arbeit bekommen. Der RAM war direkt nachdem ich das Prog gekickt hatte nur mit 100mb oder so belegt - bei laufendem KDE, Mozilla, Konquerer, KDevelop und haufenweise Terminals.
Momentan ist ähnlich viel offen, da braucht er 250MB Ram .
mtb][sledgehammer
Grand Admiral Special
- Mitglied seit
- 11.11.2001
- Beiträge
- 4.375
- Renomée
- 30
- Mein Laptop
- HP Compaq nx6125
- Prozessor
- Athlon XP 2500+
- Mainboard
- Asrock K7S8XE
- Kühlung
- AC / selfmade Wakü
- Speicher
- 1 GB PC3200 Team Memory
- Grafikprozessor
- ATI Radeon 9500
- Display
- 20,1'' Samsung SyncMaster 205BW 1680x1050
- HDD
- Samsung SV0802N
- Optisches Laufwerk
- Toshiba DVD-ROM SD-M1612
- Soundkarte
- Creative SB Live! Player 1024
- Gehäuse
- Chenbro Net Server Tower
- Netzteil
- Coba 400 Watt (silent)
- Betriebssystem
- Windows XP, Ubuntu Linux
- Webbrowser
- Mozilla Firefox
- Verschiedenes
- knc TV Station , Terratec Cinergy 1200 DVB-C
Das dümmste, was ich je gemacht habe, war es eine Komponente in Delphi von einem Panel zu vererben. Diese neue Komponente dürfte grob 100-400 mal dynamisch auf meinem Fenster verteilt werden. Das hat auch alles schön funktioniert, zumindest unter Win XP. Jedoch nicht unter Win 9x, IMO zu viele Handles, was das Ding nicht mehr verwalten konnte. Die Folge war eine Auslastung der Resourcen.
Ende der Geschichte war die, dass ich das Problem weitgehend anders lösen musste. Und ich hatte mich so gefreut, meine erste passende Anwendung für richtige Vererbung zu haben
Dumm also deshalb, weil es mich sehr viel Zeit gekostet hat, zum einen den "Fehler" zu finden und dann das Problem auf eine deutlich andere Art und Weise zu lösen.
Ende der Geschichte war die, dass ich das Problem weitgehend anders lösen musste. Und ich hatte mich so gefreut, meine erste passende Anwendung für richtige Vererbung zu haben
Dumm also deshalb, weil es mich sehr viel Zeit gekostet hat, zum einen den "Fehler" zu finden und dann das Problem auf eine deutlich andere Art und Weise zu lösen.
SuperCow
Admiral Special
- Mitglied seit
- 11.11.2001
- Beiträge
- 1.318
- Renomée
- 1
- Mein Laptop
- HP Compaq nx9005
- Prozessor
- X2 3800+ @2,5GHz @1,25V (default) @C'nQ
- Mainboard
- Gigabyte GA-MA69G-S3H
- Kühlung
- Arctic Cooling Freezer 64 Pro
- Speicher
- 4x512MB, DDR2-800, Aeneon
- Grafikprozessor
- onboard
- Display
- Sony SDM-X95FB (19'')
- HDD
- Seagate Barracuda 7200.10 250GB (250GB/Platters)
- Optisches Laufwerk
- LiteOn SOHD-16P9S (DVD/CD), Pioneer DVR-110 (DVD-Brenner)
- Soundkarte
- onboard
- Gehäuse
- Chieftec CS-601
- Netzteil
- 300W HEC
- Betriebssystem
- Windows 7
- Webbrowser
- IE 8
Original geschrieben von Devastators
habe ich hier nicht letztens gelesen..
for (i = 0; i == 10; i++)
8)
Hey, da hatt ich ne totale Blockade...
JKuehl
Grand Admiral Special
- Mitglied seit
- 22.06.2003
- Beiträge
- 7.903
- Renomée
- 145
- Standort
- Stockholm, Schweden
- Mitglied der Planet 3DNow! Kavallerie!
- Aktuelle Projekte
- POEM, SIMAP
- Lieblingsprojekt
- SIMAP, POEM
- Meine Systeme
- Q6600
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- Ryzen-3700x
- Mainboard
- Asus B350 Prime Plus
- Kühlung
- Fractal Design Celsius 240
- Speicher
- 48 GB Corsair LPX 3000
- Grafikprozessor
- 1080ti
- Display
- 28" Samsung 3840x2160
- SSD
- Samsung Evo 960 500Gb
- Soundkarte
- Creative X-Fi Titanium PCIe
- Netzteil
- Be Quiet Dark Power 650
- Betriebssystem
- Windows 10 64 Bit
die größte dummheit?
das ich jemals in Qbasic programmiert habe,
das ich danach in pascal programmiert habe,
und danach in Delphi ohne Objektorientierung
Abgesehen davon: Spaghetticode und zuwenig kommentieren.
Danach sind mir bis jetzt aber keine gravierenden Fehler mehr passiert die nicht innerhalb von Minuten debuggt waren.
das ich jemals in Qbasic programmiert habe,
das ich danach in pascal programmiert habe,
und danach in Delphi ohne Objektorientierung
Abgesehen davon: Spaghetticode und zuwenig kommentieren.
Danach sind mir bis jetzt aber keine gravierenden Fehler mehr passiert die nicht innerhalb von Minuten debuggt waren.
So, aus aktuellem Anlass hab ich wieder 2 Sachen beizusteuern.
An der ersten Sache hab ich sicher eine Stunde debuggt, ohne auch nur einen Schritt weiterzukommen. Dabei geht es um eine der Implementierungen aus dem Primzahl-Thread, meine frisch geschriebene hat da komischerweise immer falsche Ergebnisse geliefert. Nicht um Größenordnungen, aber es waren immer etwas weniger Primzahlen als es hätten sein sollen.
In kurzform hole ich mal aus wie so ein Sieb funktioniert: Man markiert einen gewissen Anteil von Zahlen, der auch alle Primzahlen enthält als prim und schließt dann nach und nach alle nicht-Primzahlen wieder aus. Das lässt sich recht einfach in einem Bit-Feld erledigen, wo zB. 1 für prim, und 0 für nicht prim steht.
Durch diverse Optimierungen kann man das soweit ausbauen, dass man nur noch einen kleineren Teilbereich aller Zahlen betrachtet, die man auch zu Anfangs alle als prim vermutet und so als prim (entspr. Bit=1) markiert.
Ich hab dafür normale 32bit Integer genommen, und zur Initialisierung in einem Array von Integern muss jedes Bit jeden Integers auf 1 gesetzt werden.
Also hab ich alle Integer auf 0xFFFFFF gesetzt. Nach dieser besagten Stunde sinnlosen Debuggens (das Prog selbst hat einwandfrei funktioniert) bin ich doch mal darüber gestollpert, dass 0xFFFFFF die oberen 8 Bits auf 0 setzt... die richtige Maske wäre 0xFFFFFFFF .
2. Problem ist eben gerade aufgetaucht. Das hab ich aber schnell gefunden, denn laut Murphy muss sowas einfach mal passieren (geht garnet anders). Da ich gerade vor meinem NB sitze (A64, AMD64 Gentoo) hab ich bevor ich meinen Desktop verlassen hab meinen ganzen Development-Ordner (Progs der letzten 2 Jahre, immerhin 250MB groß) auf mein NB kopiert. Da mein Desktop ein normaler K7 2.2GHz ist, bringt das immer so ein paar Probleme mit sich (IA32 vs. AMD64), man muss in den Ordnern von KDevelop (damit progge ich hauptsächlich) noch ein libtoolize --copy --force ausführen. Da ich das weis, hab ich das natürlich auch gemacht, danach per Automake usw. das Configure Skript erzeugt, das hat mir die Makefile gemacht und das Programm (an dem ich gerade rumgeändert hatte) wurde problemlos übersetzt.
Allerdings gab es an einer recht unerklärlichen Stelle ein Segfault, und der Debugger hat das auf eine Zeile zurückgeführt die zwar mit Speicher hantiert, die aber noch nie Probleme gemacht hat (und diese Funktion die das betrifft hab ich schon seit einer ganzen Weile völlig ohne Probleme im Einsatz).
Es kam wie es kommen musste - die Flags standen, da das Programm nicht großartig schnell laufen muss, einfach auf -O0 -g3 für den Debug-Mode... ohne march Angabe.
Ich hatte natürlich nicht alle Sources verändert, und so kam beim Vergleich von Source und .o heraus, dass er nicht alles neucompiliern muss. Und so hat er (gcc) fröhlich eine IA32 ELF (.o), die noch von meinem K7 compiliert wurde, mit den neuen AMD64 ELFs aus den veränderten Sources zusammengelinkt - ohne sich auch nur 1mal zu beschweren.
Dass das in die Hose gehen muss, war natürlich irgendwie klar.
An der ersten Sache hab ich sicher eine Stunde debuggt, ohne auch nur einen Schritt weiterzukommen. Dabei geht es um eine der Implementierungen aus dem Primzahl-Thread, meine frisch geschriebene hat da komischerweise immer falsche Ergebnisse geliefert. Nicht um Größenordnungen, aber es waren immer etwas weniger Primzahlen als es hätten sein sollen.
In kurzform hole ich mal aus wie so ein Sieb funktioniert: Man markiert einen gewissen Anteil von Zahlen, der auch alle Primzahlen enthält als prim und schließt dann nach und nach alle nicht-Primzahlen wieder aus. Das lässt sich recht einfach in einem Bit-Feld erledigen, wo zB. 1 für prim, und 0 für nicht prim steht.
Durch diverse Optimierungen kann man das soweit ausbauen, dass man nur noch einen kleineren Teilbereich aller Zahlen betrachtet, die man auch zu Anfangs alle als prim vermutet und so als prim (entspr. Bit=1) markiert.
Ich hab dafür normale 32bit Integer genommen, und zur Initialisierung in einem Array von Integern muss jedes Bit jeden Integers auf 1 gesetzt werden.
Also hab ich alle Integer auf 0xFFFFFF gesetzt. Nach dieser besagten Stunde sinnlosen Debuggens (das Prog selbst hat einwandfrei funktioniert) bin ich doch mal darüber gestollpert, dass 0xFFFFFF die oberen 8 Bits auf 0 setzt... die richtige Maske wäre 0xFFFFFFFF .
2. Problem ist eben gerade aufgetaucht. Das hab ich aber schnell gefunden, denn laut Murphy muss sowas einfach mal passieren (geht garnet anders). Da ich gerade vor meinem NB sitze (A64, AMD64 Gentoo) hab ich bevor ich meinen Desktop verlassen hab meinen ganzen Development-Ordner (Progs der letzten 2 Jahre, immerhin 250MB groß) auf mein NB kopiert. Da mein Desktop ein normaler K7 2.2GHz ist, bringt das immer so ein paar Probleme mit sich (IA32 vs. AMD64), man muss in den Ordnern von KDevelop (damit progge ich hauptsächlich) noch ein libtoolize --copy --force ausführen. Da ich das weis, hab ich das natürlich auch gemacht, danach per Automake usw. das Configure Skript erzeugt, das hat mir die Makefile gemacht und das Programm (an dem ich gerade rumgeändert hatte) wurde problemlos übersetzt.
Allerdings gab es an einer recht unerklärlichen Stelle ein Segfault, und der Debugger hat das auf eine Zeile zurückgeführt die zwar mit Speicher hantiert, die aber noch nie Probleme gemacht hat (und diese Funktion die das betrifft hab ich schon seit einer ganzen Weile völlig ohne Probleme im Einsatz).
Es kam wie es kommen musste - die Flags standen, da das Programm nicht großartig schnell laufen muss, einfach auf -O0 -g3 für den Debug-Mode... ohne march Angabe.
Ich hatte natürlich nicht alle Sources verändert, und so kam beim Vergleich von Source und .o heraus, dass er nicht alles neucompiliern muss. Und so hat er (gcc) fröhlich eine IA32 ELF (.o), die noch von meinem K7 compiliert wurde, mit den neuen AMD64 ELFs aus den veränderten Sources zusammengelinkt - ohne sich auch nur 1mal zu beschweren.
Dass das in die Hose gehen muss, war natürlich irgendwie klar.
Beffo38
Fleet Captain Special
Ein echter Klassiker, den ich mir unter PHP geleistet habe (unter Java hätte der Compiler gemeckert).
Und ich hab mich gefragt, warum die ganze Zeit macheirgendwas() aufgerufen wurde, obwohl $lalala nicht 'hallo' war. Hat auch verdammt lang gedauert, bis ich den Fehler gefunden habe.
Naja, ein = sieht ja auch fast wie ein == aus *g*
PHP:
$lalala = $_GET['lalala'];
//......
if ($lalala = 'hallo')
macheirgendwas();
Und ich hab mich gefragt, warum die ganze Zeit macheirgendwas() aufgerufen wurde, obwohl $lalala nicht 'hallo' war. Hat auch verdammt lang gedauert, bis ich den Fehler gefunden habe.
Naja, ein = sieht ja auch fast wie ein == aus *g*
IVIaraud3R
Grand Admiral Special
- Mitglied seit
- 18.07.2002
- Beiträge
- 6.844
- Renomée
- 196
habe vor jahren mit turbo pascal mal nen iq-test programmiert und meinem namen "i" gegeben ... wo "i" noch 0 war und sofort nach eingabe dieses strings i:i lief ... und ich depp habe (weils schnell gehen musste) das nimmer überprüft ... sollte ja net bei meinem namen so sein, sondern der des kumpels ...
Bob Byte
Admiral Special
- Mitglied seit
- 21.02.2002
- Beiträge
- 1.698
- Renomée
- 9
- Standort
- in meiner Wohnung
- Mein Laptop
- IBM R50
- Prozessor
- Athlon XP 2400+
- Mainboard
- Asus A7N8X
- Speicher
- 2x 512 MB
- Grafikprozessor
- ATI 9000 passiv gekühlt
- Display
- Acer 19" TFT 1280*1024
- HDD
- 1x Maxtor 120GB, 1x WD 200GB
- Optisches Laufwerk
- LG- DVD Brenner, LG DVD-ROM
- Soundkarte
- onboard
- Betriebssystem
- Windows XP
- Webbrowser
- Firefox
- Verschiedenes
- Bald kommt hoffentlich was ganz neues, dann mit Multiboot
Habe mal an einem Online-Shop gebastelt, Änderungen im PHP Code vorgenommen, brav hochgeladen und mich gewundert warum es nicht anders angezeigt wurde... fast verzweifelt, am nächsten Morgen ging es dann... bis ich feststellt das ich den Cache aktiviert hatte... dafür habe ich mir die halbe nacht um die Ohren geschlagen... seitdem arbeite ich dort ohne Cache .
Greetz BB
Greetz BB
MagicAndre1981
Vice Admiral Special
- Mitglied seit
- 05.09.2005
- Beiträge
- 674
- Renomée
- 10
- Standort
- Nordhausen
- Mein Laptop
- FSC Amilo 1424
- Prozessor
- AMD AthlonXP 2400+@2,2GHz
- Mainboard
- ASUS A7V600
- Speicher
- 1GB PC3200 MDT
- Grafikprozessor
- ATI Radeon 9500Pro@350MHz Chip- und 300MHz Speichertakt
- Display
- 19" CRT
- HDD
- 2*120GB Maxtor IDE
- Optisches Laufwerk
- PIONEER DVD 120-S (DVD-ROM)
- Soundkarte
- Creative Soundblaster Live! 5.1
- Netzteil
- 350W Enermax
- Betriebssystem
- WindowsXP Prof. SP2
@Beffo
Das hab ich mit C/++ aber auch schon ein paarmal gehabt...
Deshalb schreibe ich in C# das immer so:
Code:
if (1 == InVar)
{
machWas();
}
else
{
machWasAnderes();
}
Wie das schreibt ist dir doch absolut selbst überlassen, ich setze die Einrückungen und Zeilenumbrüche genauso. Davon warnt der Compiler aber auch nicht davor, wenn man ihn nicht dazu auffordert vor sowas zu warnen.
Russel-Athletic
Vice Admiral Special
- Mitglied seit
- 30.01.2003
- Beiträge
- 528
- Renomée
- 1
Achja ich hab auch noch was, quasi aus meinem ersten C/C++ Projekt:
Aufgabe: Gib dem Programm nen Ordner, es soll daraus ne Playlist erstellen. Benutze dafür ne Lib, die schon existiert.
Problem 1: Programm schreibt Müll in die Datei. Warum? Nach vielen cout's der aktuellen Elemente (natürlich muss man auch noch so abfangen, dass er das aktuelle Element vor dem "absturz ausgibt, weil die Daten in der Reihenfolge gelesen werden, in der sie auf der Platte sind). Irgendwann bin ich aber darauf gekommen, dass ich nicht bedacht habe, dass die Lib von nem Bild/txt/sonstwas komische Werte gibt. Also Stunden und viele Fragen gebraucht, bis ich dazu ne halbwegs vernünftige if habe. Dabei noch Stunden gebraucht um die Dateiendungen alle klein zu schreiben, weil mein Programm natürlich case-sensitive ist.
Problem 2: Immernoch Müll in der Datei.
Nach einigen suchen finde ich heraus, dass es an der Lib liegt. Die hat nämlich ne eigene Stringklasse, die man auch noch umwandeln muss.
Und da fällt mir gerade noch was von Delphi ein:
Ich weiß nicht mehr was für nen Programm das war, auf jedenfall habe ich Jahrzehnte gebraucht um den "Fehler" zu finden. Herausgestellt hat sich folgendes:
Wird ein bestimmtes Objekt zur kontrolle ausgegeben, dann kommt Müll raus.
Wird diese Ausgabe nicht gemacht, funktioniert das Programm wie erwartet.
Kann mir jemand das erklären? Das Objekt wird natürlich nicht irgendwie zerstört beim ausgeben.
Aufgabe: Gib dem Programm nen Ordner, es soll daraus ne Playlist erstellen. Benutze dafür ne Lib, die schon existiert.
Problem 1: Programm schreibt Müll in die Datei. Warum? Nach vielen cout's der aktuellen Elemente (natürlich muss man auch noch so abfangen, dass er das aktuelle Element vor dem "absturz ausgibt, weil die Daten in der Reihenfolge gelesen werden, in der sie auf der Platte sind). Irgendwann bin ich aber darauf gekommen, dass ich nicht bedacht habe, dass die Lib von nem Bild/txt/sonstwas komische Werte gibt. Also Stunden und viele Fragen gebraucht, bis ich dazu ne halbwegs vernünftige if habe. Dabei noch Stunden gebraucht um die Dateiendungen alle klein zu schreiben, weil mein Programm natürlich case-sensitive ist.
Problem 2: Immernoch Müll in der Datei.
Nach einigen suchen finde ich heraus, dass es an der Lib liegt. Die hat nämlich ne eigene Stringklasse, die man auch noch umwandeln muss.
Und da fällt mir gerade noch was von Delphi ein:
Ich weiß nicht mehr was für nen Programm das war, auf jedenfall habe ich Jahrzehnte gebraucht um den "Fehler" zu finden. Herausgestellt hat sich folgendes:
Wird ein bestimmtes Objekt zur kontrolle ausgegeben, dann kommt Müll raus.
Wird diese Ausgabe nicht gemacht, funktioniert das Programm wie erwartet.
Kann mir jemand das erklären? Das Objekt wird natürlich nicht irgendwie zerstört beim ausgeben.
MagicAndre1981
Vice Admiral Special
- Mitglied seit
- 05.09.2005
- Beiträge
- 674
- Renomée
- 10
- Standort
- Nordhausen
- Mein Laptop
- FSC Amilo 1424
- Prozessor
- AMD AthlonXP 2400+@2,2GHz
- Mainboard
- ASUS A7V600
- Speicher
- 1GB PC3200 MDT
- Grafikprozessor
- ATI Radeon 9500Pro@350MHz Chip- und 300MHz Speichertakt
- Display
- 19" CRT
- HDD
- 2*120GB Maxtor IDE
- Optisches Laufwerk
- PIONEER DVD 120-S (DVD-ROM)
- Soundkarte
- Creative Soundblaster Live! 5.1
- Netzteil
- 350W Enermax
- Betriebssystem
- WindowsXP Prof. SP2
Wie das schreibt ist dir doch absolut selbst überlassen, ich setze die Einrückungen und Zeilenumbrüche genauso.
Darum ging es mir nicht, intel_hasser sondern darum anstatt
Code:
if(i==0)
Code:
if (0==i)
zu schreiben Wenn du bei der ersten Variante ein "=" vergisst, hast du eine Zuweisung und suchst lange rum. Beim 2. Code bekommst du eine Fehlermeldung vom Compiler
greetz
André
"called object is not a function" und gewundert, dass eine per Header eingebundene Funktion in der Funktion darunter problemlos funktioniert hat.
Nach einer Weile ist mir durch Zufall aufgefallen, dass ich einen gleichnamigen Parameter an die Funktion übergeben hab .
Nach einer Weile ist mir durch Zufall aufgefallen, dass ich einen gleichnamigen Parameter an die Funktion übergeben hab .
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
Vermutlich schreibt das Programm an Stellen im Speicher rum, an denen es nicht rumschreiben soll. Wenn es eine unwichtige Stelle war und die Zugriffsrechte passen, muss deswegen das Programm nicht abstürzen. Wenn aber nachfolgender Code auf diesen Speicherbereich zugreift und sich am geänderten Inhalt verschluckt, crasht das Programm.Wird ein bestimmtes Objekt zur kontrolle ausgegeben, dann kommt Müll raus.
Wird diese Ausgabe nicht gemacht, funktioniert das Programm wie erwartet.
Kann mir jemand das erklären?
Such also mal nach Pufferüberläufen, mehrfachen Speicherfreigaben und ähnlichen Sachen. Solche Fehler lassen sich idR sehr schwer aufspüren, weil das Programm wie gesagt nach dem Passieren der fehlerhaften Stelle noch tagelang weiterlaufen kann bevor es abstürzt.
Russel-Athletic
Vice Admiral Special
- Mitglied seit
- 30.01.2003
- Beiträge
- 528
- Renomée
- 1
Programm hab ich ja schon fertig
Trotzdem danke.
Trotzdem danke.
M43ggIS
Lieutnant
Für unsere Firma die Homepage von ASP auf PHP umgestellt und aus Faulheit das & für die ASP Stringverknüpfung per Suchen& Ersetzen in einen . geändert, so wie das funktioniert.
Nur wollte dieses 3.000 Zeilen Script mit ner riesen Datenbank dahinter einfach nichts ausgeben.
Nach sehr viel Kaffee und 2 Tagen davor rumgehockt ist mir dann aufgefallen, dass im HTML Link statt einem & wie HTML strings ja verknüpft werden plötzlich auch ein . stand.....
War ich sauer oO
Nur wollte dieses 3.000 Zeilen Script mit ner riesen Datenbank dahinter einfach nichts ausgeben.
Nach sehr viel Kaffee und 2 Tagen davor rumgehockt ist mir dann aufgefallen, dass im HTML Link statt einem & wie HTML strings ja verknüpft werden plötzlich auch ein . stand.....
War ich sauer oO
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 52K
- Antworten
- 0
- Aufrufe
- 66K