Я пытаюсь отладить проблему сбоя, когда memcpy
пытается получить доступ к несуществующей ячейке памяти и терпит неудачу. Ниже приводится сокращенная версия кода проблемы:
void func_foo(int **a) {
int *b, c;
if (*a) {
b = *a;
}
memcpy(&c, b, sizeof(int));//this crashes because address "b" is not accessible.
}
Мой вопрос: есть ли способ проверить, доступна ли память перед попыткой memcpy
, или есть другой механизм защиты для предотвращения сбоя здесь? Не вызовет ли проверка **a
также сбой в этом случае?
int
изb
вc
. - person   schedule 03.06.2013b
(a. K. A.*a
) на действительную ячейку памяти. - person   schedule 03.06.2013*a
равно NULL, этот код используетb
без его инициализации. Это представитель вашего настоящего кода? Если это так, ваш реальный код не работает;b
всегда следует инициализировать перед его использованием вmemcpy
, иначеmemcpy
не следует выполнять. Если нет, значит, вы не показали нам код представителя. - person Eric Postpischil   schedule 03.06.2013