probleme mit struct



  • hallo zusammen,

    ich bin schier am verzweifeln. habe ein problem bei etwas super einfachen, anscheinend nicht einfach genug. ich benutze .net, aber das sollte hier ja keinen
    unterschied machen.

    also erstmal der code:

    typedef unsigned short WORD;
    #define LOC_ENGINE_NODE_CAPACITY 8
    
    typedef struct{
       WORD shortAddress;
       WORD x;       // between 0.00 and 2^14, 0.25 meters intervall
       WORD y;       // between 0.00 and 2^14, 0.25 meters intervall
       WORD z;       // between 0.00 and 2^14, 0.25 meters intervall
       WORD rssiAcc; // RSSI delivered from MAC layer
       WORD hops;
    } RAW_REF_NODE_S;
    
    void rtInsert(RAW_REF_NODE_S* value, RAW_REF_NODE_S* rt_table) {
    ...
    }
    
    int main(void) {
    RAW_REF_NODE_S rt_table[LOC_ENGINE_NODE_CAPACITY];
    RAW_REF_NODE_S *value;
    
    value = (RAW_REF_NODE_S*)malloc(sizeof(RAW_REF_NODE_S));
    
    if(value == NULL)
       printf("kein speicher bekommen\n");
    
    switch(rt_table) { //rt_table vom typ enum
    
    ...
    case INSERT:
    	printf("insert \n");
    	printf("eingabe: shortAddr, x , y, z, hops, rssiAcc\n");
    	scanf("%i", &value->shortAddress);
    	scanf("%i", &value->x);
    	scanf("%i", &value->y);
    	scanf("%i", &value->z);;
    	scanf("%i", &value->hops);
    	scanf("%i", &value->rssiAcc);
    	rtInsert(value, rt_table);
    break;
    
    ...
    }
    

    im debug-mode:
    also mein problem hier ist das die variable "value" keine werte besitzt.
    im überwachungsfenster heißt es bei z.b. value->hops = has no runtime value.

    also hab ich mir gedacht das ich bei malloc was falsch mache, aber dann hab ich
    mir im eax-register die adresse angeschaut die ich von malloc zurückbekomme,
    steht auch nur blödsinn drauf (klar) und der verändert sich aber nicht wenn ich was drauf schreibe.

    also was mache ich falsch.

    gruß

    mdoemli



  • malloc() reserviert dir den Speicher, kümmert sich aber nicht um den Inhalt. Eventuell würde es schon reichen, wenn du stattdessen calloc() verwendest.

    PS:

    //rt_table vom typ enum

    Woher denn das? rt_table hast du ein paar Zeilen weiter oben als Array von struct's definiert

    PPS: Ich wußte gar nicht, daß .NET noch mit C-Code zusammenarbeitet.



  • hallo CStoll,

    ich meinte nicht rt_table, sondern rt_eingabe.
    habs auch schon mit calloc versucht, steht halt dann lauter nullen auf der adresse von eax (klar). aber wenn ich drauf schreiben will funktioniert das nicht bzw. sehe keine änderung im speicher.

    habe immer im überwachungsfenster:

    value:
    - shortAddress <has no runtime value> unsigned short

    wegen .net und c: habe schon n c++ file programmiere aber in c, ist nur zum testen.



  • halt,

    funktioniert doch bzw. hab jetzt mit calloc gesehen das es im speicher doch verändert wird, sorry.
    jetzt wundert mich nur die ausgabe vom überwachungsfenster.

    also nochmals sorry für die mühen.

    gruß

    mdoemli


Anmelden zum Antworten