int *threadPatterns;
int a = 0;
threadPatterns = &a;
...
return (void *)threadPatterns;
&a
- это адрес локальной переменной, которая уничтожается при возврате searchfile()
. После завершения потока этот адрес больше не действителен, и доступ к нему вызывает неопределенное поведение.
Чтобы исправить его, верните адрес, который будет существовать после окончания потока. Это может быть глобальная переменная или переменная типа c, или указатель, передаваемый из основного потока, или куча памяти, выделенная с помощью malloc()
. Если вы сделаете последнее, то основной поток должен free()
сделать это, как только это будет сделано.
int *threadPatterns = malloc(sizeof(int));
if (!threadPatterns) {
// handle allocation failure
}
...
while (...) {
if(strP) {
cout << carg << ": " << readLine;
(*threadPatterns)++;
}
}
...
return threadPatterns;