C Указатель для структуры – segmentation fault

У меня проблемы с этой программой. Это очень просто. Мне нужно назначить значения для моей структуры из указателей, которые я создал, но я продолжаю получать ошибку сегментации. Любые идеи, что я делаю неправильно:

#include  #include  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; } 

Вы назначаете значение *p , *q и *r , но они не инициализируются: они указывают на случайную память.

Вам необходимо инициализировать их, назначив им новое значение, выделенное в куче (с помощью malloc ):

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

или заставляя их указывать на уже существующее значение:

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

Ваша проблема заключается в том, что вы пишете случайные ячейки памяти, так как вы не инициализируете указатели и не выделяете память.

Вы можете сделать следующее:

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

Очевидно, вам нужно освободить их, когда вы закончите с ними:

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

Вы не выделяете память указателю. Поэтому, когда вы делаете * p и * q и * r, вы разыскиваете нулевой указатель (или случайный указатель). Это приводит к ошибке сегментации. Используйте p = malloc (sizeof (int)); когда вы объявляете переменные.