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

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

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Q&A

解決済

2回答

8624閲覧

Segmentation fault (コアダンプ)が出力後、コアファイルが出力されない

hashibiro

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

0グッド

0クリップ

投稿2021/02/14 02:01

編集2021/02/14 02:49

実行ファイルを実行したところ”Segmentation fault”が発生したのでコアファイルを出力するため、
”gcc -g -pthread threadAttr.c”を打ち”Segmentation fault (コアダンプ)”と出力されたが、コアファイルがなく、出力されない原因が知りたいです。

実行環境です。WSL (Windows Subsystem for Linux)を使用しています。
lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <unistd.h> 4#include <pthread.h> 5#include <errno.h> 6 7#define SIZE 10000000 8 9void *threadFunc(void *arg){ 10 double table[SIZE]; 11 int i; 12 for(i=0;i<SIZE;i++){ 13 table[i] = i*3.14; 14 } 15 return NULL; 16} 17int main(int argc,char *argv[]){ 18 pthread_attr_t attr; 19 pthread_t thread; 20 21 pthread_attr_init(&attr); 22 if(pthread_attr_setstacksize(&attr,SIZE*sizeof(double)+100000i) !=0) 23 { 24 printf("Failed to set stack size.\n"); 25 exit(1); 26 } 27 28 if(pthread_create(&thread,&attr,threadFunc,NULL) !=0) 29 { 30 printf("Error:Failed to create new thread.\n"); 31 exit(1); 32 } 33 34 if(pthread_join(thread,NULL) != 0) 35 { 36 printf("Error:Failed to wait for the thread termination.\n"); 37 exit(1); 38 } 39 40 return 0; 41}

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

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

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

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

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

tatsu99

2021/02/14 02:11

OSの設定により、コアファイルが出力されないケースがあります。OSを明記すると良い回答が得られるかと。
guest

回答2

0

以下、bashの場合です。(詳しくは「man bash」の「ulimit」の項を参照してください。)
(追記:動作環境見落としてました。WSLでの確認はしていないです。)

次のコマンドで「core file size」を確認してください。

ulimit -c

「-a」オプションを使用すると、全部のリソース制限の設定が確認できます。

ulimit -a

以下のコマンドでコアファイルのサイズが無制限になります。

ulimit -c unlimited

※コメントを受けて追記

core file size が"0"だったので”unlimited”に変更して実行しましたが、コアファイルは出ていなかったです。

手元のLinux環境(Linux Mint 19.3)では「ulimit -c unlimited」ではコアファイルがカレントディレクトリに出力されたのでWSL固有の事情があるのかもしれません。

とりあえずネット検索して以下を見つけました。

Linux - Bash on Windowsでコアダンプファイルを出力したい|teratail

そこから状況が変わっていなければ、WSLではコアファイルを出力させることは出来ないということかもしれません。
もしかしたらWSL2ならば状況が変わるかもしれません。

投稿2021/02/14 02:52

編集2021/02/14 04:47
hidezzz

総合スコア1248

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

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

hashibiro

2021/02/14 03:19

core file size が"0"だったので”unlimited”に変更して実行しましたが、コアファイルは出ていなかったです。ちなみに実行したディレクトリにコアファイルのが出力されると思っていたのですが、 コアファイルの出力先が別のところにあったり、設定が違うとかはあるんでしょうか。 ulimit -a core file size (blocks, -c) unlimited
hidezzz

2021/02/14 04:38

回答に追記しました。
guest

0

自己解決

WSL1からWSL2へ移行したらcoreがカレントディレクトリに出力されるようになりました。
下記のサイト参考にWSL1 → WSl2へ移行しました。
https://www.aise.ics.saitama-u.ac.jp/~gotoh/WSL1ToWSL2.html
https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

投稿2021/05/02 06:34

hashibiro

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問