始めまして、お世話になります。
C言語を用いて有限要素解析プログラムを作成しているときのエラーについて質問させてください。
動的に確保した配列に複数回アクセスし、都度計算をしているのですが、特定の回数のときだけ、メモリが確保されていないエラーが発生します。
ハンドルされない例外が 0x002148EB (プロジェクト名.exe) で発生しました: 0xC0000005: 場所 0xD2F1A974 への書き込み中にアクセス違反が発生しました。
#include <stdio.h>
#include <malloc.h>
#include <math.h>
#include <stdlib.h>
double **dmatrix(int nr1, int nr2, int nl1, int nl2){
int i, nrow, ncol;
double **a;
nrow = nr2 - nr1 + 1; ncol = nl2 - nl1 + 1; if ((a = malloc(nrow*sizeof(double *))) == NULL){ printf("メモリなし(from dmatrix)\n"); exit(1); } a = a - nr1; for (i = nr1; i <= nr2; i++) a[i] = malloc(ncol*sizeof(double)); for (i = nr1; i <= nr2; i++) a[i] = a[i] - nl1; return(a);
}
void fnc1(){
int i, j, k;
double **M;
M = dmatrix(1, 3, 1, 3);
k = 1;
do{
for (j = 1; j <= 3; j++){
for (i = 1; i <= 3; i++){
if (i == j) {
M[i][j] = 25 / 6;
}
else{
M[i][j] = 25 / 12;
}
}
}
k++;
} while (k <= 400);
}
int main(){
fnc1();
}
C言語
ループを回していくと最初は順調に回るのですが、k=257のときi=1、k=258のときi=3メモリが確保されていないエラーが発生します。(jはどの値でも同じエラーが出ます。)kを259にするするとエラーはなくなりました。