2010-11-14 4 views
5

Ho problemi con questo programma. È molto semplice Devo assegnare valori alla mia struct dai puntatori che ho creato, ma continuo a ricevere un errore di segmentazione. Qualche idea su cosa sto facendo male:C Pointer for Struct - Segmentation fault

#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

E dove pensi che i tuoi indicatori puntino a? – ruslik

risposta

6

Voi assegnazione di un valore a *p, *q e *r, ma non sono inizializzati: sono puntatori che puntano alla memoria casuale.

è necessario inizializzare loro, sia assegnando loro un nuovo valore assegnato nel mucchio (con malloc):

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

o che li indicano un valore già esistente:

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

Non stai allocando memoria al puntatore. Pertanto quando stai facendo * p e * q e * r stai dereferenziando un puntatore nullo (o un puntatore casuale). Ciò porta a un errore di segmentazione. Usa p = malloc (sizeof (int)); quando dichiari le variabili.

6

Il tuo problema è che si scrivono in posizioni di memoria casuali poiché non si inizializzano i puntatori né si alloca memoria.

Si potrebbe fare la seguente:

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

Ovviamente è necessario liberarli quando si è fatto con loro:

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