Может ли произойти сбой сегментации для чтения памяти?
Я думаю, что чтение памяти не должно вызывать каких-либо проблем, например
char *d="";
char *d2="test";
memcmp(d,d2,10);
Можно memcmp()
когда-нибудь не получится?
1 ответ
Ваше предположение неверно, поскольку чтение памяти по адресу, не отображенному в адресном пространстве процесса, приведет к SEGV
, В частности, чтение адреса 0 (почти на всех архитектурах) и чтение пространства памяти ядра (если оно вообще отображается), но в целом чтение логической памяти, в которую физическая память не отображается как читаемая.
В вашем примере вы работаете memcmp
на байтах, которые не выделены, что является неопределенным поведением. Вероятно, он будет читать мусор из стека или сегмента данных, но у вас нет возможности узнать это. Например, d
может оказаться прямо на вершине стека, и вы, таким образом, можете выйти за пределы стека в не отображенную память (стек обычно уменьшается).