2013-04-15 4 views
0

Я получаю "Segmentation Fault 11" на следующий блок кода внутри PTHREAD:Сегментация Неисправность strtol с в PTHREAD функции

потоковой составить записывается следующим образом:

int main(int argc, const char *argv[]){ 
    pthread_t t0; 
    const char * length = argv[1]; 

    pthread_create(&t0, NULL, &func, (void *)length); 
    // rest of code 
    ... 
} 

Что меня смущает, так это то, что SegFault бросается при компиляции и запуске в терминале, но не в Xcode. Любая идея о том, почему его бросают?

+0

Вы вызываете функцию func из других потоков? – m4n07

+0

Как вы используете 'length' в' main() 'после того, как он передан' pthread_create() '? А что такое 'размер'? – alk

+0

Вы не ** ** проверяете 'temp' за то, что отличаетесь от' NULL', прежде чем передать его в 'strtol()'. Также вы можете использовать 'argc' для проверки того, содержит ли' argv [1] 'какую-либо действительную ссылку. – alk

ответ

5

Если вы не ждать поток, это может быть так, что main() выходит перед func() даже выполнена (так argv затем признана недействительной, так как это выходит за рамки там). Я предполагаю, что это условие гонки, которое устраняется при запуске внутри отладчика, и именно поэтому его запуск «в Xcode» (это не проблема IDE, а факт того, что процесс отлаживается) помогает.

+1

Я использую ** pthread_join ** позже в остальной части кода для ожидания. Извините, я должен был включить это. Это должно предотвратить проблему, о которой вы заявили? – wbcrimson

+0

@wbcrimson Да, это должно. Тогда у вас есть и другие ошибки в коде. – 2013-04-16 04:55:41