
C言語の勉強をしていますが、初心者なものでなかなか思うようにできません。
Visual Studioを使って「lfit5」というプログラムを作っています。下にプログラムのmainを載せています。
int _tmain(int argc, _TCHAR* argv[])
{
int ma=2;
int mfit=2;
int ndata=4;
float m;
float s=0.0;
float *n;
float **covar;
float *chisq=&s;
void (*funcs)(float x[], float *afunc, int ma);
float x[4]={1,2,3,4};
float y[4]={0,5,15,24};
float sig[4]={1,1,1,1};
float a[2];
int ia[2];
char buf;
//chisq=0;
n=&m;
covar=&n;
funcs=orgfuncs;
lfit(x, y, sig, ndata, a, ia, ma, covar, chisq, funcs);
buf=getchar();
buf=getchar();
return 0;
}
ビルドはできたのですが、実行すると
lfit5.exe の 0x004127f4 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xccccccd0 に書き込み中にアクセス違反が発生しました。
というエラーメッセージが出ます。
最初は「coverが初期化されていない」というエラーが出ていて、
n=&m;
covar=&n;
等 を加えることで初期化のエラーは消えたのですが、次に上記のようなエラーメッセージが出始めました。
専門用語等解らないことも多いのですが、どうすればよういか解らず、御教授頂きたいです。
どうか宜しくお願い致します。
No.3ベストアンサー
- 回答日時:
恐らくlfitの中で初期化されていないポインタを使ったと思います。
0x004127f4 は例外の発生したコードのアドレスです。
0xccccccd0 はデータとしては通常はあり得ないアドレスです。
そもそも、0xCCは機械語でINT3に相当し、ブレークポイント用の
割り込み命令です。スタックなどの未使用領域は当初はこの値で
埋められるので、初期化されない自動変数はよくこの値になります。
No.2
- 回答日時:
TRACEでデバッグ文を表示するとか、ブレークポイントやトレース実行などを使って、エラーの箇所を絞り込みましょう。
メッセージは重要ですが、メッセージがどこで出ているのかが重要です。
No.1
- 回答日時:
lfit関数のソースも見せてください。
lfit関数から別の自作関数を呼んでいれば、そのソースも見せてください。
この回答への補足
アドバイスをありがとうございます。
void covsrt(float **covar, int ma, int ia[], int mfit)
{
int i,j,k;
float swap;
for (i=mfit+1;i<=ma;i++)
for (j=1;j<=i;j++) covar[i][j]=covar[j][i]=0.0;
k=mfit;
for (j=ma;j>=1;j--) {
if (ia[j]) {
for (i=1;i<=ma;i++) SWAP1(covar[i][k],covar[i][j])
for (i=1;i<=ma;i++) SWAP1(covar[k][i],covar[j][i])
k--;
}
}
}
void lfit(float x[], float y[], float sig[], int ndata, float a[], int ia[],
int ma, float **covar, float *chisq, void (*funcs)(float x[], float *afunc, int ma))
{
int i,j,k,l,m,mfit=0;
float ym,wt,sum,sig2i,**beta,*afunc;
beta=matrix(1,ma,1,1);
afunc=vector(1,ma);
for (j=1;j<=ma;j++)
if (ia[j]) mfit++;
if (mfit == 0) nrerror("lfit: no parameters to be fitted");
for (j=1;j<=mfit;j++) {
for (k=1;k<=mfit;k++) covar[j][k]=0.0;
beta[j][1]=0.0;
}
for (i=1;i<=ndata;i++) {
(*funcs)(x,afunc,ma);
ym=y[i];
if (mfit < ma) {
for (j=1;j<=ma;j++)
if (!ia[j]) ym -= a[j]*afunc[j];
}
sig2i=1.0/SQR(sig[i]);
for (j=0,l=1;l<=ma;l++) {
if (ia[l]) {
wt=afunc[l]*sig2i;
for (j++,k=0,m=1;m<=l;m++)
if (ia[m]) covar[j][++k] += wt*afunc[m];
beta[j][1] += ym*wt;
}
}
}
for (j=2;j<=mfit;j++)
for (k=1;k<j;k++)
covar[k][j]=covar[j][k];
gaussj(covar,mfit,beta,1);
for (j=0,l=1;l<=ma;l++)
if (ia[l]) a[l]=beta[++j][1];
printf( "a_%d ",l);
printf( " %f \n",a[l] );
for (i=1;i<=ndata;i++) {
(*funcs)(x,afunc,ma);
for (sum=0.0,j=1;j<=ma;j++) sum += a[j]*afunc[j];
*chisq += SQR((y[i]-sum)/sig[i]);
}
covsrt(covar,ma,ia,mfit);
free_vector(afunc,1,ma);
free_matrix(beta,1,ma,1,1);
}
上記がlfit関数です。
どうやらcoverに問題があるようで、lfitの
for (j=1;j<=mfit;j++) {
for (k=1;k<=mfit;k++) covar[j][k]=0.0;
の部分でエラーが出ているようです。
これでは初期化していることにならないのでしょうか?
何か加えると上手くいくのでしょうか?
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Run-Time Check Failure #3というエラーが出ます。
C言語・C++・C#
-
読み込み中にアクセス違反が発生しました、と出ます。これを回避することは
C言語・C++・C#
-
間接参照のレベルが異なっています
C言語・C++・C#
-
-
4
c言語 16進数の2進数への変換
C言語・C++・C#
-
5
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
6
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
7
(msvcr71d.dll) でハンドルされていない例外が発生しました
C言語・C++・C#
-
8
C言語のfopenについて教えてください。
C言語・C++・C#
-
9
ハンドルされていない例外とアクセス違反
C言語・C++・C#
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
visualstudio C# テキストボッ...
-
enumについて
-
main.c:7:43: warning: implici...
-
C++のfor文について
-
【#define】 defineで定義した...
-
変数の型を定義しなかった場合...
-
int main の前のint add(int a,...
-
配列を用いない最大値の求め方
-
GCCで暗黙の型変換の警告を出し...
-
C++でboolにintの値を代入する...
-
ハンドルされていない例外が発...
-
includeが必須ではない理由
-
エラー「invalid conversion fr...
-
外部シンボル未解決
-
typedef enumの使い方を教えて...
-
0除算を判定したい
-
void func( void )について
-
C言語 宣言した変数になにも代...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
intとINTの違いは?
-
C++のfor文について
-
2重定義って??
-
void func( void )について
-
変数の型を定義しなかった場合...
-
C言語のコンパイルエラー
-
C++でboolにintの値を代入する...
-
ハンドルされていない例外が発...
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
プログラムの中で別のmainを呼...
-
[C++]メンバ関数の仮引数について
-
0除算を判定したい
-
プログラム、どのように書いて...
-
typedef enumの使い方を教えて...
-
enumについて
おすすめ情報