Ваша программа имеет неопределенное поведение, потому что в то же время вы пишете и читаете один и тот же буфер памяти, смотрите:
iret = pthread_create( pt, NULL, showMessage, line); // start reading operation
над строкой запускает поток, который печатает символы, на которые указывает указатель line
. После запуска этого потока в следующей итерации цикла while вы вызываете функцию getline
, которая получает указатель line
. getline
может изменить строку, указанную line
в то же время, когда она печатается в начальном потоке.
После прочтения строки вы можете сделать копию, а затем передать ее в функцию печати.
pt = new pthread_t();
thrds.push_back(pt);
char* copy = malloc(strlen(line)+1);
strcpy(copy,line);
iret = pthread_create( pt, NULL, showMessage, copy); // <-
Теперь операции записи и чтения разделены, и это должно работать. Не забудьте освободить все выделенные ресурсы.