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


Anmelden zum Antworten