В чем смысл "дикого указателя" в C? - программирование
Подтвердить что ты не робот

В чем смысл "дикого указателя" в C?

Может ли кто-нибудь сказать мне, значение дикого указателя на C, как его получить, и доступно ли это на С++?

4b9b3361

Ответ 1

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

Для меня это означало бы указатель, который не относится к законному объекту, и не имеет значения NULL. Возможными источниками этих типов значений указателя могут быть неинициализированные объекты указателя, объекты, которые перестали существовать, вычисленные значения указателя, неправильно выровненные значения указателя, случайное повреждение самого указателя или то, на что оно указывалось, и т.д.

int main(void)
{

   int *p;  // uninitialized and non-static;  value undefined
   { 
      int i1; 
      p = &i1;  // valid 
   }            // i1 no longer exists;  p now invalid    

   p = (int*)0xABCDEF01;  // very likely not the address of a real object

   { 
      int i2;  
      p = (int*)(((char*)&i2) + 1);  // p very likely to not be aligned for int access
   }

   {
      char *oops = (char*)&p;  
      oops[0] = 'f';  oops[1] = 35;  // p was clobbered
   }
}  

и т.д. и т.д. Есть всевозможные способы получить недопустимое значение указателя в C. Моим фаворитом должен быть парень, который пытался "сохранить" свои объекты, записав их адреса в файл. Как ни странно, когда он читал эти значения указателя во время другого запуска программы, они больше не указывали на его объекты. Представьте, что.

Но это то, что дикий для меня. Поскольку это не нормативный термин, это означает, что человек, который говорил или писал, означал, что это означает. Спросите его или ее.

Ответ 2

Дикий указатель в C является указателем, который не был инициализирован до его первого использования. Из Wikipedia:

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

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

например,

int f(int i)
{
    char* dp;    //dp is a wild pointer
    ...
}

Ответ 3

Это не стандартный термин. Он обычно используется для обозначения указателей, указывающих на неправильное расположение памяти. int *p; *p = 0; //P is a wild pointer

Или

int *p = NULL;
{
  int a;
  p = &a; // as soon as 'a' goes out of scope,'p' is pointing to invalid location
}

*p = 0;

Ответ 4

Чтобы получить дикий (ака свисающий) указатель, вы:

  • Создать объект
  • Создайте указатель на этот объект
  • Удалить объект
  • Забудьте установить указатель на нуль

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

Ответ 5

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

Ответ 6

Диким указателем является любой указатель, который используется (в частности, как L_value {ie (* pointer) = x}), имея значение, которое либо неверно, либо больше не корректно. Его также можно использовать для описания использования памяти, которая не указана в качестве указателя как указателя (возможно, после дикого указателя или с использованием устаревших определений структуры).

Нет официального определения. Это просто слова, которые мы используем, ссылаясь на определенные ошибки указателя или результаты этих ошибок.

Ответ 7

Wiki

Это указатель на неинициализированный объект или объект с плохим состоянием. использование этого указателя вызовет проблемы. wiki - хороший источник объяснений.

Ответ 8

Дикий указатель - это указатель, который не указывает на действительный объект (указанного типа, если применимо), или на выделенное нулевое значение, если это применимо.

Подробнее о Дикий указатель здесь

Ответ 9

Дикий указатель - это указатель, объявление которого присутствует, но оно еще не определено. Значит, мы объявили указатель - data_type * ptr; // но не определяем, какой адрес он содержит * ptr = 100//дикий указатель не указывает ни на один действительный адрес. поэтому мы получим ОШИБКУ printf ("ptr:% d", ptr);//мы получим: 0 (в компиляторе gcc)

Ответ 10

a ponter, у которого не обнаружено какой-либо переменной типа данных, которую varable вызывает дикий указатель

Ответ 11

Неинициализированный указатель называется Wild Pointer. Предположим, если вы попробуете

int * p;//указывая на случайное или неизвестное местоположение. * p = 16;/Некоторая неизвестная ячейка памяти повреждена. Этого никогда не должно быть сделано. /

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