ここから本文です

【500枚】C言語プログラムのセグメントエラーについて 以下のソースのプログラム...

moy********さん

2017/7/3019:50:16

【500枚】C言語プログラムのセグメントエラーについて
以下のソースのプログラムを実行するとセグメントエラーが出ます。
しかし、DATA_SIZEの値を小さく(1000など)するとエラー無く実行でき

ます。
この場合、原因としては何が考えられますか?
ちなみにfopenで開いているmatrix2048.datには4194304(2048×2048)個の実数が書かれています。

#include <stdio.h>
#include <stdlib.h>
#define DATA_SIZE 2048

int main(void)
{
int n=0;
FILE *fp;
float p[DATA_SIZE * DATA_SIZE] __attribute__ ((aligned(32)));
fp= fopen("matrix2048.dat","r");
while(n < DATA_SIZE*DATA_SIZE){
fscanf(fp,"%f",&(p[n]));
printf("%d %f\n",n,p[n]);
n++;
}
fclose(fp);

return 0;
}

閲覧数:
30
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

久遠人さん

2017/7/3019:59:10

pがスタックを食い潰しているみたいだから、pをmainの外に出してみたら?

#include <stdio.h>
#include <stdlib.h>
#define DATA_SIZE 2048
float p[DATA_SIZE * DATA_SIZE] __attribute__ ((aligned(32)));
int main(void)
{
int n=0;
FILE *fp;
fp= fopen("matrix2048.dat","r");
while(n < DATA_SIZE*DATA_SIZE){
fscanf(fp,"%f",&(p[n]));
printf("%d %f\n",n,p[n]);
n++;
}
fclose(fp);

return 0;
}

質問した人からのコメント

2017/7/30 20:35:39

ご回答の通りにしたらエラー消えました!
ありがとうございました!

ベストアンサー以外の回答

1〜1件/1件中

ayu********さん

2017/7/3019:55:09

原因はその通り,セグメントエラーですね.
初めに用意する配列が大きすぎます.

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる