Рубрики

C | Динамическое Распределение Памяти | Вопрос 3

Выход?

# include<stdio.h>
# include<stdlib.h>

   

void fun(int *a)

{

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

}

   

int main()

{

    int *p;

    fun(p);

    *p = 6;

    printf("%d\n",*p);

    return(0);

}

(А) Может не работать
(B) Работы и гравюры 6

Ответ: (А)
Объяснение: Программа недействительна. Попробуйте заменить «int * p;» на «int * p = NULL;», и он попытается разыменовать нулевой указатель.
Это потому, что fun () создает копию указателя, поэтому, когда вызывается malloc (), он устанавливает скопированный указатель в ячейку памяти, а не в p. p указывает на случайную память до и после вызова fun (), и когда вы разыменовываете его, он падает.
Если вы хотите добавить память к указателю из функции, вам нужно передать адрес указателя (т.е. двойной указатель).

Рекомендуемые посты:

C | Динамическое Распределение Памяти | Вопрос 3

0.00 (0%) 0 votes