Первое, что нужно проверить, - это возвращаемые значения из вызовов pthread_create
, вы сохраняете их, но никогда не проверяете, что потоки действительно были запущены.
Если pthread_create
не удастся, то pthread_t будетмусор, который вылетит pthread_join
РЕДАКТИРОВАТЬ:
На самом деле первое, что нужно сделать, это скомпилировать с -Werror -Wall
, потому что я не думаю, что вы можете объявлять массивы таким образом.
Предполагается, что это код на C, поэтому переместите все объявления переменных перед всем кодом.Это должно подчеркнуть проблему, которая, вероятно, приводит к поломке - вы не можете разместить массивы переменного размера в стеке таким образом.Если вам нужны массивы переменного размера, вам нужно malloc
пространство в куче.