double **rg = (double**)malloc(sizeof(double*) * img->height);
for(y = 0; y < img->height; y++){
rg[y] = (double*)malloc(sizeof(double)*img->width);
}
のように動的確保した配列を用いて以下の関数を
median(rg,img->width,img ->height,2 * scale);
のように呼び出して実行すると「ヒープが壊れていることが原因として考えられます」といったエラーがでてrgの解放中にプログラムが止まってしまいます。
原因を調べてみたところ引数の値を書き換えている個所をコメントアウトした際にはプログラムが動いたので
そこが怪しいと思うのですが、なぜそのようなエラーが発生するのかがどうしてもわかりませんでした。
こういった場所で質問するのは初めてなので何か情報が不足してましたらご指摘も合わせてよろしくお願いします。
void median(double **array, int height, int width, int range){
int vectorsize = (2 * range + 1) * (2 * range + 1);
double *vector;
vector = (double*)malloc(sizeof(double) * vectorsize);
double **median = (double**)malloc(sizeof(double*) * (height - 2));
for(int size = 0; size < (height - 2); size++)
median[size] = (double*)malloc(sizeof(double) * (width - 2));
for(int y = range; y < height - range; y++){
for(int x = range; x < width - range; x++){
//周囲の値をvectorにコピー
int k = 0;
for(int j = y - range; j <= y + range ; j++){
for(int i = x - range; i <= x + range; i++){
vector[k] = array[j][i];
//printf("[%d][%d]vector[%d] = %lf\n",j,i,k,vector[k]);
k++;
}
}
//vectorをソート後、中央値をmedianに格納
qsort(vector,vectorsize,sizeof(double),compare_double);
median[y - range][x - range] = vector[(vectorsize - 1) / 2];
}
}
//エラーを起こしている原因?
for(int y = range; y < height - range; y++){
for(int x = range; x < width - range; x++){
array[y][x] = median[y - range][x - range];
}
}
free(vector);
}