Подтвердить что ты не робот

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

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

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

int main(void)
{
    int i;
    int *ptr;

    i = 2;
    *ptr = 5;
    printf("%d",*ptr);
}
4b9b3361

Ответ 1

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

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

Ответ 2

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

int main(void) {
    int i;
    int * ptr = (int *)malloc(sizeof(int));

    i = 2;
    *ptr = 5;     
    printfn("%d",*ptr); 
    free(ptr);
}

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

int main(void) {
    int i;
    int * ptr;

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

Заметьте также, что свобода вышла!!!

Ответ 3

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

ptr = &i;

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

Ответ 4

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

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