エラー「ヒープが壊れていることが原因として考えられます」について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
median

エラー「ヒープが壊れていることが原因として考えられます」について

#1

投稿記事 by median » 13年前

こんにちは。VS2005でプログラミングの勉強をしていてわからないことがあったので質問しました。

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);
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: エラー「ヒープが壊れていることが原因として考えられます」について

#2

投稿記事 by softya(ソフト屋) » 13年前

動く形で提示してもらうと助かりますので、最低限に絞ってエラーを再現できるプログラムは作れませんでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

めるぽん

Re: エラー「ヒープが壊れていることが原因として考えられます」について

#3

投稿記事 by めるぽん » 13年前

>median(rg,img->width,img ->height,2 * scale);
は、width と height が逆じゃないでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: エラー「ヒープが壊れていることが原因として考えられます」について

#4

投稿記事 by softya(ソフト屋) » 13年前

めるぽん さんが書きました:>median(rg,img->width,img ->height,2 * scale);
は、width と height が逆じゃないでしょうか。
あっ!
それが怪しいですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

median

Re: エラー「ヒープが壊れていることが原因として考えられます」について

#5

投稿記事 by median » 13年前

softya(ソフト屋)さん
めるぽんさん
どうもありがとうございました。

こんなくだらないミスに気づかないで質問して申し訳ないです(汗)

閉鎖

“C言語何でも質問掲示板” へ戻る