Мне очень жаль, что я не могу предоставить более подробную информацию о моем коде, так как я беру на себя другой проект. Структура классов очень сложна, и я не могу воспроизвести проблему, используя простой пример.
По сути, если я удаляю объект, все операторы в деструкторе были выполнены успешно, но как только деструктор заканчивает выполнение, возникает ошибка сегмента. Даже если я просто сделаю деструктор пустым и ничего не сделаю, ошибка сегмента все равно случится. Этот класс не имеет базового класса.
Мой код выглядит так:
ParallelSynthesizer* p = new ParallelSynthesizer(argc, argv);
p->synthesize();
delete p;
cout << "after deleting" << endl;
«после удаления» не показывалось, так как до этого произошла ошибка сегмента. Но деструктор p выполнен успешно.
[РЕДАКТИРОВАНО ПОСЛЕ НЕКОТОРЫХ КОММЕНТАРИЙ] метод synthesize () использует многопоточность, но он очень прост:
pthread_t threads[num_threads];
// makes the "params" array here. skipped.
for (int i=0; i<num_threads; i++) {
pthread_create(&threads[i], NULL, synthesizeThreadMethod, (void*)(params[i]));
}
for (int i=0; i<num_threads; i++) {
pthread_join(threads[i], NULL);;
}
Это почти все в методе synthesize (), поэтому я не думаю, что многопоточность приведет к каким-либо проблемам.
Я использую g ++ в Linux. Кто-нибудь знает возможные причины этой проблемы?
Я снова прошу прощения за то, что не смог найти простой пример, который вызывает эту ошибку.