Вы не можете надежно проверить, выделена ли какая-либо область памяти. *array
не является допустимым кодом, потому что он такой же, как array[0]
, но array[0]
не выделен. Нераспределенная ячейка памяти может содержать любое значение.
Единственный вариант - убедиться, что вы получаете информацию о том, размещен ли массив вместе с вашим массивом. Популярная опция представляет нераспределенный массив как NULL
, но вы можете выбрать и другую опцию.
Кстати, есть разница между пустым массивом (то есть массивом размера 0) и массивом, который вообще не выделяется. Первый вариант возникает, когда вы используете malloc(0)
, второй, когда ваш указатель вообще не инициализирован. Для malloc(0)
разрешено возвращать NULL
, но разрешено возвращать и ненулевой указатель (который вы, однако, не можете разыменовать). Оба способа действительны в соответствии со стандартом.