Ваш блок catch
перехватывает исключения C ++.На вашей платформе memcpy
не определен для генерации исключений C ++, и ваш компилятор знает об этом, поэтому он правильно сообщает, что ваш блок catch
никогда не будет выполнен.
Это разрешено для memcpy
для исключения C ++.Поведение функции не определено для случаев, когда один из указателей не указывает на допустимый объект.В этой ситуации вполне допустимо, чтобы функция генерировала исключение C ++, потому что неопределенное поведение означает, что для нее вполне допустимо делать что угодно .
Вы можете обнаружить, что memcpy
на вашей платформе вызывает ОС исключения, когда вы читаете или пишете неверную память.Вы можете получить нарушение прав доступа , но блок C ++ catch
не улавливает такого рода исключения.Для этого используйте __try
и __except
.А еще лучше, проанализируйте и отредактируйте свою программу, чтобы убедиться, что вы никогда не попадете в такую ситуацию.Тогда вам не нужно беспокоиться о поведении какой-либо конкретной платформы.