2016-07-20 3 views
2

Ich habe diese Funktion:Dereferenzieren Strukturinstanz Element mit Strukturinstanz Zeiger

static pair_t * // not visible outside this file 
pair_new(const int key) 
{ 

    pair_t *pair = malloc(sizeof(pair_t)); 

    if (pair == NULL) { 
    // error allocating memory for pair; return error 
    return NULL; 
    } else { 


      printf("key is %d\n",key); 

     *(pair->key) = key; 
     *(pair->count) = 1; 
     pair->next = NULL; 
     return pair; 

    } 
} 

aber die Art, wie ich zu dereferenzieren das Schlüsselelement der Instanz des Paares bin versucht wird, mir einen seg Fehler geben. Ich denke es ist, weil "Paar" ein Zeiger ist.

das Paar Struktur wie folgt definiert ist:

typedef struct pair { 
    int *key;    // search key for this item 
    int *count;     // pointer to data for this item 
    struct pair *next; // children 
} pair_t; 

Irgendwelche Vorschläge, wie man den Wert von key richtig viel

geschätzt werden

Antwort

3

Nein, es mit pair kein Problem ist würde sich ändern, es ist mit key (und die count, auch). Der Zeiger wird nicht initialisiert verwendet, wodurch undefined behavior aufgerufen wird.

An dem Punkt, wo Sie; re key

*(pair->key) = key; 

gibt es keinen gültigen Speicher key zugewiesen zu dereferenzieren versucht, so die dereferenzieren rufen UB. Sie müssen key Speicher zuweisen, bevor Sie es verwenden können. Gleiches gilt für die count.

+2

danke, ich habe hinzugefügt: pair-> key = malloc (sizeof (int)); Paar-> count = malloc (sizeof (int)); und es scheint jetzt zu arbeiten – dirtyb

+0

@dirtyb Gern geschehen. Sie können auch [in Erwägung ziehen, eine Antwort zu akzeptieren, die Ihnen geholfen hat] (http://meta.stackexchange.com/q/5234/244062). –

Verwandte Themen