2017-03-15 5 views
-1

Ich muss ein Programm schreiben, in dem Struktur mit zwei Feldern ist: Integer und String. Als nächstes muss ich eine Funktion schreiben, die diese Struktur dynamisch zuweist und int und string als Parameter verwendet, um sie an die zugewiesene Struktur weiterzuleiten. Diese Funktion gibt auch den Zeiger auf die neu erstellte Struktur zurück. Das zweite Element dieses Programms sollte eine Funktion sein, die den struct-Zeiger als Parameter akzeptiert, dann alle Dateien auf dem Bildschirm ausgibt und dann den Speicher von struct freigibt. Das ist das Beste, was ich mir vorstellen kann.Dynamische Speicherzuweisung einer Struktur

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

struct str{ 
    int num; 
    char text[20]; 
}; 

struct str* return_address(int *num, char *text){ 
    struct str* new_struct=malloc(sizeof(struct str)); 
    new_struct->num=num; 
    new_struct->text[20]=text; 
    return new_struct; 
}; 

void release(struct str* s_pointer){ 
    printf("%d %s", s_pointer->num, s_pointer->text); 
    free(s_pointer); 
}; 



int main() 
{ 
    struct str* variable=return_address(1234, "sample text"); 
    release(variable); 

    return 0; 
} 
+0

Was ist die Frage? – sergej

+0

Ich konnte dieses Programm nicht funktionieren lassen. Selbst wenn es kompiliert wird, stürzt es ab. –

+0

Ich denke, 'new_struct-> Text [20] = Text;' ist nicht das, was Sie wollen –

Antwort

0
  1. Ihr Array ist sehr klein, auch gar nicht dynamisch es ist. Wenn Sie mit malloc() trotzdem reservieren, warum nicht alles dynamisch zuweisen?
  2. Sie können einem Array nicht zuweisen.
  3. Die num Mitglied, die vermutlich die Länge der "Zeichenfolge Zeichenfolge" speichern soll, wird einen Zeiger zugewiesen, der nicht das ist, was Sie anscheinend möchten. Und auch das Verhalten wird nur in ganz besonderen Situationen definiert, wenn Sie einen Zeiger auf eine ganze Zahl zuweisen. Der Compiler sollte Sie warnen, es sei denn, Sie haben Warnungen deaktiviert.

Vielleicht möchten Sie dies,

struct string { 
    char *data; 
    int length; 
}; 

struct string * 
allocate_string(int length, const char *const source) 
{ 
    struct string *string; 
    string = malloc(sizeof *string); 
    if (string == NULL) 
     return NULL; 
    string->length = strlen(source); 
    // Make an internal copy of the original 
    // input string 
    string->data = malloc(string->length + 1); 
    if (string->data == NULL) { 
     free(string); 
     return NULL; 
    } 
    // Finally copy the data 
    memcpy(string->data, source, string->length + 1); 
    return string; 
} 

void 
free_string(struct string *string) 
{ 
    if (string == NULL) 
     return; 
    free(string->data); 
    free(string); 
} 
Verwandte Themen