Тонкости и хитрости в вопросах и ответах
Моя программа аварийно завершается еще до выполнения! (если использовать отладчик, то видно, что смерть наступает еще до выполнения первой инструкции в main)
Видимо, у вас один или несколько очень больших (более килобайта) локальных массивов. Во многих системах размер стека фиксирован, а операционные системы, в которых осуществляется динамическое выделение стековой памяти, (например, UNIX) могут быть введены в заблуждение, когда размер стека резко увеличивается.
Часто предпочтительнее объявить большие массивы типа static (если, конечно, каждый раз при рекурсивном вызове не требуется свежий массив).
Что означают сообщения «Segmentation violation» и «Bus error»?
Это значит, что программа пытается получить доступ к несуществующей или запрещенной для нее области памяти. Это постоянно происходит из за неинициализированных или неверно инициализированных указателей, по вине malloc или, может быть, scanf.
Моя программа аварийно завершается, очевидно, при выполнении malloc, но я не вижу в ней ничего плохого
К несчастью, очень легко разрушить внутренние структуры данных, создаваемые malloc, а возникающие проблемы могут быть трудны для отладки. Чаще всего проблемы возникают при попытке записать больше данных, чем может уместиться в памяти, выделенной malloc; особенно распространена ошибка malloc(strlen(s)) вместо strlen(s) + 1.
Другие проблемы включают освобождение указателей, полученных не в результате выполнения malloc, или попытки применить функцию realloc к нулевому указателю.
Существует несколько отладочных пакетов, чтобы помочь отследить возникающие при применении malloc проблемы.Есть у кого нибудь комплект тестов для Си компилятора?
Где достать грамматику Си для программы YACC?
Самая надежная — конечно же грамматика из стандарта ANSI. Другая грамматика, подготовленная Джимом Роскиндом (Jim Roskind), находится на ics.uci.edu в директории pub/*grammar*. Одетый в плоть, работающий образец ANSI грамматики (принадлежащий Джефу Ли(Jeff Lee)) находится на