но когда я проверяю адрес указателя, это отрицательное число
Это невозможно. То, что вы можете увидеть, это интерпретация адреса как целого числа со знаком.
В самом C нет ограничений. Выделения ограничены типом данных, используемым для запрашиваемого размера блока, и возможностями адресации операционной системы.
Во время выполнения запрос не будет выполнен (malloc()
возвращает NULL
), если не будет непрерывного блока свободной памяти запрошенного размера.