2010-11-14 19 views
5

Tengo problemas con este programa. Es muy simple. Necesito asignar valores a mi estructura a partir de los punteros que creé, pero sigo recibiendo un error de segmentación. Cualquier idea de lo que estoy haciendo mal:Puntero C para Struct - Error de segmentación

#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

Y dónde ¿Cree que apuntan sus punteros? – ruslik

Respuesta

6

Los asignar un valor a *p, *q y *r, pero no están inicializados: son punteros que apuntan a memoria aleatoria.

debe inicializar ellos, o bien se les asigna un nuevo valor asignado en el montón (con malloc):

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

o hacer que apuntan a un valor ya existente:

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

No está asignando memoria al puntero. Por lo tanto, cuando está haciendo * p y * q y * r está desreferenciando un puntero nulo (o un puntero aleatorio). Esto conduce a una falla de segmentación. Use p = malloc (sizeof (int)); cuando declaras las variables.

6

Su problema es que escribe en ubicaciones de memoria aleatorias ya que no inicializa los punteros ni asigna memoria.

Se podría hacer lo siguiente:

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

Obviamente se necesita para liberarlos cuando haya terminado de usarlos:

free(p); 
free(q); 
free(r); 
Cuestiones relacionadas