🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

Q&A

解決済

2回答

1854閲覧

GLUT使用時にコード上でGLUTに直接関わらない部分でstd::threadを使うとSegmentation faultになります

kurokogeanpan

総合スコア13

C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

0グッド

0クリップ

投稿2019/09/11 19:52

編集2019/09/11 19:55

質問

数値シミュレーションのようなことをやっていて結果をGLUTで表示しようとしたのですが、
実装し始めたところSegmentation faultが出て動かなくなってしまいました。

デバッガはコードでない部分を指していてどこで止まったのかわからないです。

探ってみたところGLUTの処理には直接関わらない部分のstd::thread初期化で
失敗するとわかったのですが、自分で調べても解決できなかったので質問をさせていただきます。

ソースコードなど

元のソースコードは600行あるので現象が確認できた最小のソースコードを載せます。

c++

1#include <thread> 2#include <GL/glut.h> 3 4void hoge() { 5 /* この下の一行をコメントアウトするかどうかで動いたり動かなかったりします 6 * どうしてこんな変な挙動をするのか全く見当もつきません... 7 */ 8 std::thread piyo([&] {}); 9} 10 11void display() { 12 glClear(GL_COLOR_BUFFER_BIT); 13 glBegin(GL_POLYGON); 14 glVertex3f(0.5, 0.0, 0.5); 15 glVertex3f(0.5, 0.0, 0.0); 16 glVertex3f(0.0, 0.5, 0.0); 17 glVertex3f(0.0, 0.0, 0.5); 18 glEnd(); 19 glFlush(); 20} 21 22int main(int argc, char **argv) { 23 glutInit(&argc, argv); 24 glutInitDisplayMode(GLUT_SINGLE); 25 glutInitWindowSize(400, 300); 26 glutInitWindowPosition(100, 100); 27 glutCreateWindow("Hello world!"); 28 glutDisplayFunc(display); 29 glutMainLoop(); 30 return 0; 31} 32

以下、CLionのCMakeLists.txtです

cmake_minimum_required(VERSION 3.10) project(test) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_FLAGS "-pthread") add_executable(test main.cpp) find_package(OpenGL REQUIRED) find_package(GLUT REQUIRED) include_directories( ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} ) target_link_libraries(test ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} )

以下、失敗した際のエラーメッセージです

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

補足情報

  • CLion 2018.1
  • elementary OS 0.3.2 Freya (64-bit)
  • Intel® Core™ i7-4700MQ CPU @ 2.40GHz × 8
  • Intel Corporation 4th Gen Core Processor Integrated Graphics Controller (rev 06)
    NVIDIA Corporation GK106M [GeForce GTX 765M] (rev a1)
  • 以下、nvidia-smiの結果です
    グラボ関係で以前散々困らされたので確証はないのですが少し疑っています。
Thu Sep 12 04:46:47 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 384.183 Driver Version: 384.183 CUDA Version: 9.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 765M Off | 00000000:01:00.0 N/A | N/A | | N/A 63C P0 N/A / N/A | 427MiB / 2001MiB | N/A Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 Not Supported | +-----------------------------------------------------------------------------+

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

void hoge() { /* std::thread は、スレッドの停止を待たずにデストラクトすると例外飛ばすんじゃなかったっけ。*/ std::thread piyo([&] {}); piyo.join(); // なのでコレ追加して試してみて。 }

投稿2019/09/11 19:56

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurokogeanpan

2019/09/12 02:52

とてもお早い回答ありがとうございます! 早速試してみたのですが、同じ結果 ``` Process finished with exit code 139 (interrupted by signal 11: SIGSEGV) ``` でした。 載せたコードだと関数`void hoge()`は定義されているだけで どこでも使われていないのですが...うーん この後もう少し粘ってみようと思います、 デバッガがmain文に入る前に止まっているので 環境に問題があるかもしれないです。
guest

0

glutを使うのを諦めてqtに切り替えようとインストールを試みた際にPCの容量が不足し、
昔のバージョンのkernelを消すなどしていたらカーネルパニックを起こしたので、
いっそのこととOSをクリーンインストール(elementary OS 5 Juno)しました。

環境を再び整えて実行したところセグフォせず問題なく動いてしまい、解決してしまいました。
どうして失敗していたのかよくわからなかったのが気持ち悪いですが、
とても早く回答をくださったepistemeさんをベストアンサーとして解決済みとさせていただきます。

投稿2019/09/13 04:27

kurokogeanpan

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問