«Безопасный» интервал значений указателя? - PullRequest
2 голосов
/ 18 июля 2011

Прежде всего, я не очень знаком со стеком и кучей.

Во многих программах я вижу, что указатели проверяются на NULL. Но это не мешает передать сумасшедший адрес, такой как 0x002011.

Мой вопрос: есть ли "безопасный" интервал адресов, к которому я могу проверить принадлежность указателя и быть разумно уверенным, что он действителен, перед разыменованием его?

Ответы [ 12 ]

0 голосов
/ 19 июля 2011

Нет пути, как говорили другие.

Но если бы был способ узнать, какие адреса находятся в адресном пространстве процесса, тогда вы могли бы иметь ключ (если адрес "внутри ", это не обязательно хороший действительный указатель; но если он находится за пределами, наверняка он недействителен).

Некоторые возможные проверки зависят от системы (предыдущее предложение также действительно предполагает конкретный"набор "современных систем");например, на многих машинах адреса должны быть выровнены по словам или похожи, так что если у вас есть нечетный адрес (для небайтового набора данных), вы можете предположить, что это неверный указатель.

Хотя, эти и другие«рассуждения» не надежны (и не переносимы).

0 голосов
/ 18 июля 2011

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

На самом деле, даже NULL не гарантирует указание на недействительную память.Это просто соглашение, которое проводится, но не поддерживается никаким стандартным AFAIK.

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