Никогда не проверяйте состояние ошибки, которое вы не знаете, как обработать.
Серьезно, что ты планируешь делать? Существует только небольшое подмножество функций, которые вам разрешено вызывать из обработчика сигнала (см. man 7 signal
), и printf и longjmp (longjmp - единственный способ, с помощью которого я могу прийти в себя после такой проблемы), не являются одним из них. , Если у вас возникнут проблемы с повторным выполнением процесса, вам также может понадобиться няня, которая выполнит эту работу и избежит путаницы.
Обратите внимание, в соответствии с man alloca
на самом деле вам не говорят, что «выделение» завершается неудачно, вы просто получаете SIGSEGV, когда пытаетесь получить доступ к плохой памяти, и, конечно, это может не произойти в массиве text []. вообще или, возможно, даже не в функции, которая выделяет текст [] вообще.
Хотя два приведенных выше абзаца основаны на Linux, общая теория верна для всех платформ.
Используйте malloc и имейте чистое обращение. Будь в здравом уме.
[EDIT]
На самом деле есть один способ попытаться это сделать, это вычислить начало стека (стек записи в основном) и ограничение стека (надеясь, что в ОС не хватит страниц). Затем, прежде чем делать выделение большого стека, вы можете вычислить, насколько вы близки к концу. Дайте себе щедрую комнату для маневра и потерпите неудачу, прежде чем выделять.