PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: Merkwuerdiges Verhalten bei Zuweisung von 0



Deathcrow
22-06-2008, 14:18
Hallo!

Bei folgender Zuweisung passiert etwas merkwuerdiges.
"p->digits[0] = 0"

p->digits[0] ist vom typ "uint_32".

Bei Zuweisung von anderen Zahlen (1,5, 42... hab ein paar ausprobiert) gibt es kein Problem. Nur wenn ich versuche dem Element eine 0 zuzuweisen passiert folgendes (Auszug von gdb):



1: p->digits[0] = 0
(gdb) si
0x000016f2 84 p->digits[0] = 0;
1: p->digits[0] = 4
(gdb)
0x000016f4 84 p->digits[0] = 0;
1: p->digits[0] = 1028
(gdb)
0x000016f6 84 p->digits[0] = 0;
1: p->digits[0] = 263172
(gdb)
85 p->ndigits = 0;
1: p->digits[0] = 67372036


Ich bin leider ueberhaupt kein C Profi und der ganze Code ist ein bisschen komplex, deswegen weiss ich nicht was ich da noch hier reinkopieren soll.

Vielleicht hat ja einer von euch eine spontane Idee was die Ursache fuer so ein merkwuerdiges Verhalten bei Zuweisungen von 0 sein koennte.

PS: das programm laeuft uebrigens auf einem atmega32 mikrocontroller, da koennen also auch noch andere sachen mit reinspielen. aber so ein problem hatte ich noch nicht. und so eine C zuweisung ist ja eigentlich recht straight-forward.

bmann
23-06-2008, 15:45
Hi
wenn einfache Zuweisungen scheitern ist es meistens ein fehlerhafter Zeiger:
* Ist der "p" Zeiger gültig? D.h. zeigt der auf ein gültiges Objekt/Speicherbereich?
* Ist "digits" ein gültiges array, d.h. existiert dieser Speicher überhaupt?

In C++ evtl. auch noch prüfen ob der "this" pointer gültig ist.

Ansonsten muss da jemand anderes ran, bei gdb Ausgaben muss ich immer zu lange überlegen was die überhaupt bedeuten...

btw: Versuch mal valgrind drüber laufen zu lassen, fehlerhafte Speicherzugriffe lassen sich damit meistens sehr einfach finden.

CU
Andi

Deathcrow
23-06-2008, 18:34
Das dachte ich auch zuerst. Hab es staendig aber wegen arroganz (?) ausgeschlossen. Nach dem motto: "Wieso sollte das ein nullpointer sein, kann ja nich sein!" Ich weiss zwar immernoch nicht was da passiert, aber auf jedenfall hab ich auf einmal n nullpointer wo keiner sein sollte, und dann funzt natuerlich garnix mehr.

Werde der sache jetzt mal weiter auf die spur gehen ;D

peschmae
23-06-2008, 19:57
Hehe, wenns der Compiler jetzt nicht der GCC wäre sondern was anderes dann hätte ich einfach die Schuld darauf geschoben. Zumindest nach meinen einschlägigen Erfahrungen mit einem gewissen Embedded-Compiler diesbezüglich.

Wobei man auch bei GCC nie weiss.

Aber zum Glück hast du ja einen Debugger :-)

MfG Peschmä