Что такое дикие указатели? Как можно избежать?

Опубликовано: 16 Декабря, 2021

Неинициализированные указатели известны как «дикие» указатели, потому что они указывают на некоторую произвольную ячейку памяти и могут привести к сбою программы или ее плохому поведению.

int main()
{
int *p; /* wild pointer */
/* Some unknown memory location is being corrupted.
This should never be done. */
*p = 12;
}

Обратите внимание, что если указатель p указывает на известную переменную, то это не дикий указатель. В приведенной ниже программе p - это дикий указатель, пока он не указывает на a.

int main()
{
int *p; /* wild pointer */
int a = 10;
p = &a; /* p is not a wild pointer now*/
*p = 12; /* This is fine. Value of a is changed */
}

Если нам нужен указатель на значение (или набор значений) без переменной для значения, мы должны явно выделить память и поместить значение в выделенную память.

int main()
{
int *p = ( int *) malloc ( sizeof ( int ));
*p = 12; /* This is fine (assuming malloc doesn't return NULL) */
}
Хотите узнать больше о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровней C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .