Каково значение “дикого указателя” в C?

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

22
задан 28 revs, 3 users 96% 14 November 2012 в 09:38
поделиться

8 ответов

Чтобы получить дикий (он же висячий) указатель:

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

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

3
ответ дан 29 November 2019 в 03:35
поделиться

понтер, не имеющий определения местоположения какой-либо переменной типа данных, которая является переменной, называется "дикий указатель"

-1
ответ дан 29 November 2019 в 03:35
поделиться

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

2
ответ дан 29 November 2019 в 03:35
поделиться

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

Для меня это будет означать указатель, который не ссылается на законный объект и не имеет значения 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. Мне больше всего нравится парень, который пытался «спасти» свои объекты, записывая их адреса в файл. Как ни странно, когда он считывал значения этих указателей во время другого запуска программы, они больше не указывали на его объекты. Представьте себе это.

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

49
ответ дан 29 November 2019 в 03:35
поделиться

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

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

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

например,

int f(int i)
{
    char* dp;    //dp is a wild pointer
    ...
}
10
ответ дан 29 November 2019 в 03:35
поделиться

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

или

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

*p = 0;
5
ответ дан 29 November 2019 в 03:35
поделиться

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

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

2
ответ дан 29 November 2019 в 03:35
поделиться

Wiki

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

1
ответ дан 29 November 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: