Wert aus struct verschwindet
-
Hallo zusammen,
ich habe mal wieder ein seltsamen Fehler, den Ihr bestimmt sofort lösen könnt.
Ich habe folgenden Code:
void decodeForSet(uint8_t* data, uint8_t* pos, TermExpression* forSetID, TermExpression* forSetGEO, TermExpression* forSetTS){ //check undefined referenz error if(forSetID == NULL || forSetTS == NULL || forSetGEO == NULL){ return; }//End if clearTermExpression(forSetID); clearTermExpression(forSetGEO); clearTermExpression(forSetTS); [...] //forSet ts if(ts){ forSetTS->type = DSM_TERM_BINARY; forSetTS->opcode = DSM_OP_4; forSetTS->value1 = getTs(..) printf("TS VALUE(1) %u \n",forSetTS->value1); }//End if printf("TS VALUE(2) %i\n",forSetTS->value1); }//End decodeForSet
Das printf() im if Block gibt für value1 den richtigen wert aus, zb. 255, wird die if Anweisung verlassen und nochmals forSetTS->value1 ausgegeben, dann ist dieser Wert plötzlich 0, warum????
Vielen Dank schonmal.
uwe
-
uwerothfeld schrieb:
Hallo zusammen,
ich habe mal wieder ein seltsamen Fehler, den Ihr bestimmt sofort lösen könnt.
Ich habe folgenden Code:
void decodeForSet(uint8_t* data, uint8_t* pos, TermExpression* forSetID, TermExpression* forSetGEO, TermExpression* forSetTS){ //check undefined referenz error if(forSetID == NULL || forSetTS == NULL || forSetGEO == NULL){ return; }//End if clearTermExpression(forSetID); clearTermExpression(forSetGEO); clearTermExpression(forSetTS); [...] //forSet ts if(ts){ forSetTS->type = DSM_TERM_BINARY; forSetTS->opcode = DSM_OP_4; forSetTS->value1 = getTs(..) printf("TS VALUE(1) %u \n",forSetTS->value1); }//End if printf("TS VALUE(2) %i\n",forSetTS->value2); }//End decodeForSet
Das printf() im if Block gibt für value1 den richtigen wert aus, zb. 255, wird die if Anweisung verlassen und nochmals forSetTS->value1 ausgegeben, dann ist dieser Wert plötzlich 0, warum????
Vielen Dank schonmal.
uwe
Hier wird der Wert für value2 ausgegeben:
Zeile 25: printf("TS VALUE(2) %i\n",forSetTS->value2);
-
hi,
ne, lautet natürlich:
printf("ID %i TS %i\n",forSetID->value1, forSetTS->value1);
tipp fehler hier im post, allerdings das problem besteht in der tat mit der richtigen codezeile. jemand nen tipp?
-
kann es daran liegen, dass du im ersten fall mit %u einen unsigned wert ausgeben lässt, im zweiten aber ein %i signed ?
-
Hi,
also ich weiß nicht ob %u einen Einfluß hat, aber ich habe nochmal getestet, Erwartungswerte für ID = 1 und TS = 255
printf("TS %u ID %u\n",(forSetTS->value1),(forSetID->value1));
ergibt als Ausgabe:
TS 255 ID 0
printf("TS %u\n",forSetTS->value1); printf("ID %u\n",forSetID->value1);
ergibt als Ausgabe:
TS 255 ID 1
und
printf("ID %u TS %u\n",(forSetID->value1),(forSetTS->value1));
ergibt als Ausgabe:
ID 1 TS 255
versteht dies einer????
mfg
uwe
-
Hallo,
welche Datentypen haben die Struktur-Komponenten forSetTS->value1 und forSetID->value1?
MfG,
Probe-Nutzer
-
hi,
also eigentlich waren die value1 element in der struct definiert als uint32_t. Dann hab ich noch bissl rumprobiert und festgestellt wenn ich dies gegen unsinged int ersetze es funktioniert. Dies habe ich nun erst einmal bei allen Elementen geändert. Das struct sieht also wie folgt aus:
typedef struct { TermType type; unsigned int aggnum; unsigned int varid; unsigned int opcode; unsigned int value1; unsigned int value2; } TermExpression;
wobei ich das als uintXX Typen eigentlich besser fand. Kann mir das jemand erklären???
Danke Euch für Eure Hilfe. Tolles Forum hier !!!!!
uwe