Важно помнить, что вы выделяете достаточно памяти плюс один для завершающего символа nul (проницательные читатели укажут этот nul, который в основном присутствует по причине - nul с одним 'l' равно '\0'
[Спасибо Software Monkey за указание на ошибку!], Ноль с двумя 'l' - указатель, указывающий на ничто).
Вот пример того, как может возникнуть ошибка сегмента
int main(int argc, char **argv){
int *x = NULL;
*x = 5;
// boom
}
Поскольку x является указателем и имеет значение null, мы пытаемся разыменовать указатель и присвоить ему значение. Гарантированный способ генерации ошибки сегментации.
Существует старый трюк, заключающийся в том, что вы можете перехватить ошибку сегмента и получить трассировку стека, более распространенную в среде Unix, установив обработчик сигнала для перехвата SIGSEGV, и в своем обработчике сигнала вызвать процесс, подобный это:
char buf[250];
buf[0] = '\0';
sprintf(buf, "gdb -a %d | where > mysegfault.txt", getpid());
system(buf);
Прикрепляет текущую исполняемую C-программу, отлаживает к отладчику и присоединяется к нему, часть where
показывает трассировку стека ошибочной строки, которая вызвала ошибку seg, и перенаправляет вывод в файл в текущий каталог.
Примечание: это определяется реализацией, в зависимости от установки, в AIX присутствует отладчик gnu, и, следовательно, это будет работать, ваш пробег может отличаться.
Надеюсь, это поможет,
С наилучшими пожеланиями,
Том.