Segfault означает, что что-то не так. Но отсутствие segfault не означает, что что-то исправно неправильно. Если две ситуации в основном одинаковы, и в одной возникает ошибка сегментации, а в другой нет, это обычно означает, что они обе неверны, но только одна из них вызывает ошибку сегментации.
Глядя на строку char* incall[10]
, это означает, что у вас есть массив из 10 указателей на char. По умолчанию эти указатели будут указывать на случайные места. Следовательно, strcpying в incall[0] будет копировать строку в случайное место. Это, скорее всего, приведет к segfault! Сначала вам нужно инициализировать incall[0] (используя malloc
).
Итак, более важный вопрос: почему не первая строка segfault? Я бы предположил, что причина в том, что просто так получилось, что все, что было в памяти раньше, было действительным указателем. Таким образом, strcpy не segfault, он просто перезаписывает что-то еще, что позже приведет к совершенно неожиданному поведению. Поэтому вы должны исправить обе строки кода.
Еще одна проблема (после того, как вы это исправите) заключается в том, что strcpy
сам по себе очень опасен - поскольку он копирует строки до тех пор, пока не найдет 0 байт, а затем останавливается, вы никогда не можете точно знать, сколько он собирается скопировать (если только вы не используете strlen
для выделить память назначения). Поэтому вместо этого вы должны использовать strncpy
, чтобы ограничить количество копируемых байтов размером буфера.
person
mgiuca
schedule
09.06.2011