Как мой указатель будет обрабатываться в C ++ и Windows?

0

Является ли следующий указатель всегда равным NULL, если я не стану его указывать где-то сам?

 int* mGlobal = NULL;

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

И если я создаю массив моего указателя, выделяя некоторую память в кучу, а затем удаляю его, не указывая после этого в NULL, тогда этот адрес, на котором он указывает, будет бесплатным для любого другого процесса или Windows для использования? Есть ли разница между настройкой или настройкой на NULL после удаления в этом случае?

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

Много вопросов, я знаю.

Теги:
null

1 ответ

1
Лучший ответ

Является ли следующий указатель всегда равным NULL, если я не стану его указывать где-то сам?

Да. Память, используемая самим указателем, не изменится. На данный момент это не указывает ни на что, как на NULL. Если вы используете С++ 11, используйте nullptr.

И если я создаю массив моего указателя, выделяя некоторую память в кучу, а затем удаляю его, не устанавливая после этого значение NULL

Если вы выделяете память новым, а затем удаляете ее, устанавливаете ее в NULL или иначе не будете влиять на память, на которую она указывала до удаления. Поэтому нет разницы в этом случае, если я понимаю ваш вопрос. Но это хорошая практика, чтобы установить его в NULL (nullptr). Лучше по-прежнему использовать интеллектуальный указатель.

Сам указатель всегда будет там, пока мой процесс держится за него

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

пока мой процесс держится за него

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню