2010-11-14 13 views
5

Ich habe Probleme mit diesem Programm. Es ist sehr einfach. Ich muss meiner Struktur Werte aus den von mir erstellten Zeigern zuweisen, aber ich bekomme immer einen Segmentierungsfehler. Irgendwelche Ideen, was ich falsch mache:C Zeiger für Struct - Segmentierungsfehler

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

struct problem37 
{ 
    int a; 
    int b; 
    int c; 
}; 

int main() 
{ 
    printf("Problem 37\n"); 

    //create struct 
    struct problem37 myStruct; 

    //create the pointer 
    int* p; 
    int* q; 
    int* r; 

    *p = 1; 
    *q = 5; 
    *r = 8; 

    //read the data into the struct using the pointers 
    myStruct.a = *p; 
    myStruct.b = *q; 
    myStruct.c = *r; 

    printf("%d\n", myStruct.a); 
    printf("%d\n", myStruct.b); 
    printf("%d\n", myStruct.c); 

    return 0; 
} 
+1

Und wo Denkst du, deine Zeiger zeigen auf? – ruslik

Antwort

6

Sie einen Wert *p, *q und *r zuweisen, aber Sie sind nicht initialisiert: Sie sind Zeiger, die auf zufälligen Speicher zeigen.

Sie müssen sie initialisieren, entweder sie einen neuen Wert in dem Heap (mit malloc) zugeordnet Zuordnung:

int *p = (int*) malloc(sizeof(int)); 
*p = 1; 

oder macht sie weisen auf einen bereits vorhandenen Wert:

int x; 
int *p = &x; 
*p = 1; // it's like doing x=1 
2

Sie ordnen dem Zeiger Speicher nicht zu. Wenn Sie also * p und * q und * r machen, deneferenzieren Sie einen Nullzeiger (oder einen zufälligen Zeiger). Dies führt zu einem Segmentierungsfehler. Verwenden Sie p = malloc (sizeof (int)); wenn Sie die Variablen deklarieren.

6

Ihr Problem ist, dass Sie an zufälligen Speicherorten schreiben, da Sie Ihre Zeiger weder initialisieren noch Speicher reservieren.

Sie könnten wie folgt vorgehen:

int* p = malloc(sizeof(int)); 
int* q = malloc(sizeof(int)); 
int* r = malloc(sizeof(int)); 

Offensichtlich müssen Sie sie kostenlos, wenn Sie fertig sind mit ihnen:

free(p); 
free(q); 
free(r);