Невозможно присвоить значения переменной и указателю

Возможный дубликат:
Сегментация Неисправность при попытке напечатать значение в C

Я очень новичок в C, но понятия не имею, почему эта программа ломается. Программа компилируется и запускается, если я удаляю строки, связанные с i , но если я назначу i , я больше не могу ничего присваивать *ptr без нарушения программы.

 int main(void) { int i; int *ptr; i = 2; *ptr = 5; printf("%d",*ptr); } 

Вы оставляете указатель с неинициализированным значением. Поэтому, когда вы разыгрываете его ( *ptr ), вы получаете доступ к произвольному месту в памяти, что приводит к ошибке сегментации.

Point ptr на что-то, присваивая самому ptr (не *ptr ) адрес переменной (например, &i ) или некоторую свежую выделенную память (например, malloc(sizeof(int)) ).

Вот ответ для C:

 int main(void) { int i; int * ptr = (int *)malloc(sizeof(int)); i = 2; *ptr = 5; printfn("%d",*ptr); free(ptr); } 

В качестве альтернативы вы можете использовать для строк назначения i и * ptr что-то вроде:

 int main(void) { int i; int * ptr; i = 2; ptr = &i; printfn("%d",*ptr); // should print 2 } 

Обратите внимание также, что бесплатный вышел !!!

Вы объявили ptr, но не указали ни на что. Затем вы попытались написать, на что он указывает. Это никогда не бывает хорошей идеей. Попробуйте сделать ptr point to i, добавив строку

 ptr = &i; 

прежде чем пытаться писать на * ptr

Прежде чем использовать указатель на C, вам нужно либо установить указатель на существующий блок памяти, вам нужно выделить память для него, как это.

 int *ptr = (int *)malloc(sizeof(int));