К сожалению, действительно удивительный alloca()
отсутствует из почти удивительного tcc. Gcc имеет alloca()
.
malloc()
, он возвращает недопустимый указатель на fail, который будет segfault на современных системах с MMU (и, надеюсь, перезапустить их без). Он хорошо работает с рекурсией. Вы можете использовать статические переменные для достижения чего-то подобного хвостовой рекурсии и использовать только несколько других, чтобы передавать информацию на каждую итерацию.
Если вы слишком сильно нажимаете, вы уверены в segfault (если у вас есть MMU).
Обратите внимание, что malloc()
больше не предлагает, поскольку возвращает NULL (который также будет segfault, если назначен), когда система не работает. То есть все, что вы можете сделать, это залог или просто попытаться назначить его любым способом.
Чтобы использовать malloc()
, я использую глобальные переменные и назначаю их NULL. Если указатель не равен NULL, я освобожу его, прежде чем использовать malloc()
.
Вы также можете использовать realloc()
в качестве общего случая, если хотите скопировать любые существующие данные. Вам нужно проверить указатель перед тем, как это сделать, если вы собираетесь копировать или конкатенировать после realloc()
.
Это правда, что вы можете изменять форматы, не назначая объект. Но это не то поведение, на которое вы можете положиться. Это нежелательный дизайн;) и должен быть исправлен в следующих версиях, чтобы было безопаснее присвоить результат, если вы хотите, чтобы ваш код работал с будущими версиями.