Сегодня я опубликовал проблему об ошибке сегментации после уничтожения std :: string (см. в этом посте ). Я удалил код, чтобы не использовать STL, и иногда у меня по-прежнему возникает ошибка сегментации.
Следующий код прекрасно работает на моем ПК под управлением Linux. Но с использованием кросс-компилятора ARM, поставляемого производителем нашего встроенного устройства, он дает ошибку сегментации непосредственно перед catch (...)
.
Эта проблема, похоже, связана с этим сообщением в группах Google, но я пока не нашел решения.
Код скомпилирован с использованием кросс-компилятора ARM
Любые предложения по-прежнему приветствуются!
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void *ExecuteThreadMethod(void *AThread);
class Thread
{
private:
pthread_t internalThread;
public:
void RunSigSegv()
{
try
{
for (int i = 0; i < 200; i++)
{
usleep(10000);
}
} // <---- Segmentation fault occurs here
catch(...)
{
}
}
void Start()
{
pthread_attr_t _attr;
pthread_attr_init(&_attr);
pthread_attr_setdetachstate(&_attr, PTHREAD_CREATE_DETACHED);
pthread_create (&internalThread, &_attr, ExecuteThreadMethod, this);
}
};
void *ExecuteThreadMethod(void *AThread)
{
((Thread *)AThread)->RunSigSegv();
pthread_exit(NULL);
}
Thread _thread1;
Thread _thread2;
Thread _thread3;
Thread _thread4;
void s()
{
_thread1.Start();
_thread2.Start();
_thread3.Start();
_thread4.Start();
}
int main(void)
{
s();
usleep(5000000);
}