C: sprintf ведет к ядру SIGSEGV через strlen - PullRequest
1 голос
/ 28 июня 2010

Приложение My C имеет следующие две строки:

char buf[1024];
sprintf(buf, "%s/game/rabbit/habit/cmd/talkPipe", getenv("APPLICATION_PATH"));

Приложение время от времени завершает работу с SIGSEGV следующим образом:

strlen(ff2ba231, 0, ffbfe1d0, 10, 7fff24d7, 0)+0x50
sprintf(ffbfe2a4, ff2ba231, 0, 74656400, 12, ff362ef2)+0x24
RabbitTalk(ffbfea80, ffbfee50, 1, d, ffbfea12, 0)+0x21c
...

Может кто-нибудь подсказать, где / в чем может быть проблема?

Большое спасибо,

Ответы [ 2 ]

2 голосов
/ 28 июня 2010

Может быть, потому что getenv возвращает NULL?

Даже если проблема не в этом, вы должны проверить NULL: большинство функций старого стиля C этого не делают.

0 голосов
/ 28 июня 2010

getenv() вернет NULL, если переменная окружения не существует (не экспортируется), это вызывает SIGSEGV

...