Создание указателей, чтобы не возникали ошибки сегментации, и печать значений указателей с помощью printf - PullRequest
0 голосов
/ 01 марта 2020

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

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

void funct(int *p2)
{
     p2 = (int *)malloc(4);
     *p2 = 14;
     printf("%d\n", *p2);
}

int main()
{
     int *p;
     funct(p);
     printf("%d\n",*p);

     return 0;
}

1 Ответ

2 голосов
/ 01 марта 2020

Вы передаете значение переменной p в функцию funct. Ничто из того, что происходит в функции, никак не повлияет на нее, поэтому, когда вы вызываете printf на следующей строке, вы разыменовываете неинициализированный указатель. Это вызывает неопределенное поведение , которое проявляется в качестве ошибки по умолчанию.

Вам необходимо передать в функцию адрес p и изменить тип соответствующего параметра.

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

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

void funct(int **p2)
{
     *p2 = malloc(sizeof(int));
     **p2 = 14;
     printf("%d\n", **p2);
}

int main()
{
     int *p;
     funct(&p);
     printf("%d\n",*p);

     return 0;
}
...