2016-04-29 12 views
1

Ich Zeiger Lernen in c zu strukturieren und ich habe diesen Code für das Lernen gemacht:Zeiger auf struct in C

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

typedef struct 
{ 
    int id; 
    char *name; 
}struct_type_t; 

void set_struct(struct_type_t **); 

int main(int argc, char *argv[]) 
{ 
    struct_type_t *m = NULL; 

    set_struct(&m); 

    printf("%d\n", m->id); 
    //fflush(stdout); 
    printf("%s\n", m->name); 
    return 0; 
} 

void set_struct(struct_type_t **m) 
{ 
     struct_type_t t; 
     *m = &t; 

     (*m)->id = 5; 
     (*m)->name = "Pointer To Structure"; 
} 

Die Funktion set_struct soll, indem die Adresse des Zeigers die Strukturkomponenten setzen um die Funktion struct_type *m zu strukturieren.

aber in der printf-Zeile in der Hauptfunktion, es ist nicht Drucken der string-Member name der Struktur, stattdessen nur das Integer-Element id drucken.

Ich habe fflush verwendet, aber immer noch nicht funktioniert.

mir bitte helfen, diesen Code zu korrigieren und zu überprüfen, was los ist ....

Antwort

0

Sie Zeiger auf lokales Objekt zurück. Es ist auf Stapel erstellt. Sie sollten es nicht verwenden, nachdem die Funktion beendet wurde, weil sie nicht mehr existiert und ihr Speicher andere Objekte enthalten kann.

Speicherbereich auf Heap mit malloc zuweisen, initialisieren und verwenden, bis Sie free darauf aufrufen.

0

Ihr *m ist ein Zeiger und entspricht NULL. Verwenden Sie also malloc, um einen Zeiger auf Ihre struct_type_t10 zu haben, dass Sie es nachher befreien können.

void set_struct(struct_type_t **m) 
{ 
    *m = (struct_type_t *)malloc(sizeof(struct_type_t)); 
    (*m)->id = 5; 
    (*m)->name = strdup("Pointer To Structure"); 
    // or: (*m)->name = "Pointer To Structure"; 
} 
+0

, aber ich habe den Zeiger '* m' zu strukturieren' t' – harianja

+0

@harianja initialisiert, die nicht definiertes Verhalten ist, weil das Objekt den Gültigkeitsbereich – CoffeeandCode

+0

@CoffeeandCode geht, wenn es den Bereich verlässt, dann, warum es immer noch drucken das ID-Mitglied der Struktur? – harianja