Никто больше не ответил на этот вопрос. Я обобщу свой опыт здесь без каких-либо конкретных кодов. Сначала я протестировал на centos6, где исходный g cc был 4.8, и я собрал последний компилятор g cc 9.2 из gcc7.4. На этой машине двоичные сборки с компилятором 9.2 имеют ошибку сегментации только при использовании опций -O. Segfault всегда находится в std ostream & operator << (ostream &, const string &). После того, как я просмотрел весь свой код и всю библиотеку, использованную моим кодом, и удалил все предупреждения, ошибка сегментации исчезла. Я проверил около сотни входных файлов и все закончил программу со статусом выхода 0. Как ни странно, ошибка сегментации изначально возникает только в моей системе cento6. Мой Ubuntu18 работает нормально даже до удаления всех предупреждений компилятора и с опциями -O1-3. </p>
Недавно я сделал несколько небольших обновлений в моем коде, теперь я начал видеть ту же ошибку сегментации ТОЛЬКО на моем Ubuntu18 (с компилятором g cc 7.4). Оптимизация -g O1, O1, O2, O3 - все дало ошибку сегментации. -g O0 произвел код без проблем. Теперь Centos6 подходит для любой оптимизации.
Поскольку местоположение ошибки сегментации находится внутри стандартной библиотеки lib, отладочный прогон не показывает никакой полезной информации о том, где причина ошибки. Единственное оставшееся решение - закомментировать другой кусок кода, чтобы определить, какой фрагмент кода вызывает ошибку сегментации. Это оказывается полезным.
После прочтения 4 строк кода, вызвавших ошибку сегментации. Я сразу понял, какая строка вызвала проблему:
// samearray is array<int,4> somearray;
somearray[4]=someNumber;
Таким образом, сообщение возврата домой - это когда ошибка сегментации пытается ввести вас в заблуждение об «оптимизации компилятора», «разных операционных системах», «другом компиляторе». версии ", не поддавайтесь искушению и садитесь переваривать свой собственный код, комментируя куски за раз. Я до сих пор не знаю, почему выявление ошибки сегментации связано с опцией оптимизации компилятора. Надеюсь, мои страдания могут помочь другим.