質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

Q&A

解決済

3回答

404閲覧

Segmentation faultエラーについて

yoyuhihami

総合スコア26

C

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

0グッド

0クリップ

投稿2022/07/02 01:52

前提

CでWindowsのコンソールアプリを作っていたところ、エラーが出たので、そのことについて。

実現したいこと

  • エラーが出ないようにしたいです

発生している問題・エラーメッセージ

イメージ説明

該当のソースコード

C

1#include <stdio.h> 2#include <conio.h> 3#include <stdlib.h> 4#include <string.h> 5#include <strings.h> 6 7int main(void){ 8 printf("condole settion started!\n"); 9 getch(); 10 FILE *fn; 11 fn = fopen("C:/gcc/Project/data.dtbs", "r"); 12 if(fn = NULL){ 13 printf("ERROR:CANNOT OPEN THE FILE:C:/gcc/Project/data.dtbs"); 14 exit(0); 15 } 16 char ch[4336620]; 17 int cnt = 0; 18 while( (ch[cnt] = fgetc(fn)) != EOF){ 19 cnt++; 20 } 21 char *str_start; 22 str_start = strstr(ch, "<p class=\"weather-telop\">"); 23 printf("DeBug:%s", str_start); 24 25 getch(); 26 fclose(fn); 27 return 0; 28}

補足情報(FW/ツールのバージョンなど)

Windows 10 Pro 32bit
Virtual Studio Code 1.67.2

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

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

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

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

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

thkana

2022/07/02 01:59

> エラーが出ないようにしたいです で、質問としては、なにを求めていますか? 「回答者は問題を解決したコードを示せ」ということですか?
guest

回答3

0

今どきのGB単位のメモリが載ったPCでたかだか4MBちょいの配列が作れないのはおかしな話ですが、Visualtudioだと、プログラムを実行したときのスタックサイズが1MBくらいしかないようです。そのためauto変数が大きいと実行時エラーになります。

この参考記事にあるようにスタックサイズを広げる、自己解決されたようにmallocで領域を確保する、autoではなく静的に確保する、といったあたりが対策です。

投稿2022/07/02 06:04

a_saitoh

総合スコア702

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

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

0

自己解決

どうやら

C

1char ch[4336620];

の部分が悪かったようです。
そこの所を

C

1char *ch = malloc(4336620);

として、それに伴って変える場所を変えると、エラーが解決しました。

投稿2022/07/02 02:04

yoyuhihami

総合スコア26

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

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

thkana

2022/07/02 02:20

そもそも4336620という値は適切なのでしょうか?
yoyuhihami

2022/07/02 02:41

これは開こうとしているファイルの文字数を求めたものに、多少の余分を追加したものなので多分適切であると思います。
jimbe

2022/07/02 03:47

>開こうとしているファイルの文字数を求めたもの そのような場合は、固定値では無く、プログラムでファイルのサイズを求めてその分のメモリを malloc する形にするほうが良いと思います。
guest

0

ローカル変数で
char ch[4336620];
という配列のサイズが無茶だと思います。32bitシステムですし...

投稿2022/07/02 02:02

thkana

総合スコア7629

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

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

yoyuhihami

2022/07/02 02:05

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問