В моей программе C Я пытаюсь выделить память с функцией таНос(), например:Как обнаружить, что функция malloc() не будет выполнена?
char *buf = (char *)malloc(size);
, но проблема в том, что таНос() всегда возвращает ненулевой указатель. Даже если я попытаюсь выделить огромный (размер - 1E + 13) объем памяти, он возвращает действительный buf Указатель. Конечно, после этого программа выйдет из строя.
Но как я могу определить, что запрошенный объем памяти слишком велик и будет недоступен, если возвращается buf Значение не NULL?
Edit:
В комментариях я вижу, что мой вопрос может быть не ясно. Таким образом, это более развернутый пример:
unsigned long size = very_large_calculated_value;
char *buf = (char *)malloc(size);
if (buf == NULL) i_know_it_fails;
...
но Xcode работает этот код и Buf никогда не NULL независимо просили размера есть. Итак, очень скоро программа аварий. Как я могу обнаружить отказ в распределении памяти, если buf не является NULL, но, очевидно, не подлежит использованию?
Edit:
Для тех, кто отмечен вопрос как дубликат: Там нет ответа на вопрос: «Как я могу обнаружить ошибки распределения памяти?», Потому что решение, как «изменить некоторые параметры в ваша ОС "не является ответом - я прошу C-код обнаруживать ошибку выделения памяти или что-то вроде« невозможно сделать программно ».
http://en.cppreference.com/w/c/memory/malloc – juanchopanza
Что вы имеете в виду, когда говорите «он возвращает действительный указатель buf. Конечно, после того, как программа сработает». У вас есть код, демонстрирующий такое поведение? – dbush
Стандартное предупреждение: не бросать 'void *', как было возвращено 'malloc' & friends. C ** не ** C++! – Olaf