Это связано с проблемой, которую я обсуждал здесь и здесь , но поскольку мои исследования привели меня к STL как потенциальной проблеме, и к "новой"В качестве своего врага я подумал, что лучше всего начать новую тему.
Повторюсь, я использую кросс-компилятор arm-linux (версия 2.95.2), поставляемый поставщиком встроенной платформы.
Когда я запускаю нижеприведенное приложение на моем ПК с Linux, оно, конечно, работает никогда.Однако при запуске его на встроенном устройстве каждый раз возникают ошибки сегментации.Использование «malloc» никогда не перестает.Синхронизация «нового» распределения с использованием мьютекса остановит проблему, но это не практично в моем основном приложении.
Может кто-нибудь подсказать, почему это может происходить, или есть идеи, как мне обойти эту проблему?
Спасибо.
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t _logLock = PTHREAD_MUTEX_INITIALIZER;
static void* Thread(void *arg)
{
int i = 0;
while (i++ < 500)
{
// pthread_mutex_lock(&_logLock);
char* myDyn = (char*) new char[1023];
// char* buffer = (char*) malloc(1023);
// if (buffer == NULL)
// printf("Out of mem\n");
// free(buffer);
delete[] myDyn;
//pthread_mutex_unlock(&_logLock);
}
pthread_exit(NULL);
}
int main(int argc, char** argv)
{
int threads = 50;
pthread_t _rx_thread[threads];
for (int i = 0; i < threads; i++)
{
printf("Start Thread: %i\n", i);
pthread_create(&_rx_thread[i], NULL, Thread, NULL);
}
for (int i = 0; i < threads; i++)
{
pthread_join(_rx_thread[i], NULL);
printf("End Thread: %i\n", i);
}
}