debugエラーについて
VisualC++初心者です。
力を貸してください。
内容はDEBUG ERRORで
Stack around the variable "rp" was corrupted
Stack around the variable "res" was corrupted
とでてしまいます。
構造体等は省略しました。
#include <stdio.h>
#include <stdlib.h>
#define N 8
typedef struct{
int maxi,maxj,akarusa[N][N];
unsigned char *data;
}RESULT;
int bunkatsu(BMP *rp,BMP *wp);
int keisan(BMP *rp,BMP *wp);
RESULT *max(RESULT *res);
/* 画像の取込 */
int ReadHeader(BMP *p,FILE *fp){
unsigned int size;
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fseek(fp, 0, SEEK_SET);
fread(&p->Bmpf.bfType, sizeof(unsigned short), 1, fp);
fclose(fp);
exit(1);
}
fread(省略)
return 0;
}
int ReadBmp(BMP *p,FILE *fp){
int dummy, byte, i, j, pixel;
unsigned char *ReadBody=0;
ReadHeader(p,fp);
byte = p->Bmpi.biBitCount/8;
dummy = (p->Bmpi.biWidth%4)?(4-(p->Bmpi.biWidth*byte)%4) : 0;
pixel = ((p->Bmpi.biWidth)*byte+dummy)*p->Bmpi.biHeight;
ReadBody = (unsigned char*)calloc(pixel,sizeof(char));
p->body = (unsigned char*)calloc(pixel,sizeof(char));
p->blue = (unsigned char*)calloc((pixel/byte),sizeof(char));
p->green = (unsigned char*)calloc((pixel/byte),sizeof(char));
p->red = (unsigned char*)calloc((pixel/byte),sizeof(char));
fread(ReadBody,1,pixel,fp);
if(p->Bmpi.biBitCount == 8){
printf("\n");
for(j=0;j<p->Bmpi.biHeight;j++){
for(i=0;i<p->Bmpi.biWidth;i++){
p->blue[(p->Bmpi.biWidth+dummy)*j+i] =p->Rgbq[ReadBody[(p->Bmpi.biWidth+dummy)*j+i]].rgbBlue;
p->green[(p->Bmpi.biWidth+dummy)*j+i] =p->Rgbq[ReadBody[(p->Bmpi.biWidth+dummy)*j+i]].rgbGreen;
p->red[(p->Bmpi.biWidth+dummy)*j+i] =p->Rgbq[ReadBody[(p->Bmpi.biWidth+dummy)*j+i]].rgbRed;
}
}
for(j=0;j<p->Bmpi.biHeight;j++){
for(i=0;i<p->Bmpi.biWidth;i++){
p->body[(p->Bmpi.biWidth+dummy)*j+i]=ReadBody[(p->Bmpi.biWidth+dummy)*(p->Bmpi.biHeight-1-j)+i];
}
}
}
else if(p->Bmpi.biBitCount == 24 || p->Bmpi.biBitCount == 32){
for(j=0;j<p->Bmpi.biHeight;j++){
for(i=0;i<p->Bmpi.biWidth;i++){
p->blue[(p->Bmpi.biWidth+dummy)*j+i] = ReadBody[(p->Bmpi.biWidth+dummy)*(p->Bmpi.biHeight-1-j)*byte+i*byte];
p->green[(p->Bmpi.biWidth+dummy)*j+i] = ReadBody[(p->Bmpi.biWidth+dummy)*(p->Bmpi.biHeight-1-j)*byte+i*byte+1];
p->red[(p->Bmpi.biWidth + dummy)*j+i] = ReadBody[(p->Bmpi.biWidth+dummy)*(p->Bmpi.biHeight-1-j)*byte+i*byte+2];
}
}
}
else{
printf("失敗\n");
exit(1);
}
free(ReadBody);
return 0;
}
/* 480×480にする */
int bunkatsu(BMP *rp,RESULT *res){
int x,y,a=0;
for(y=0;y<rp->Bmpi.biHeight;y++){
for(x=79;x<rp->Bmpi.biWidth-80;x++){
res->data[a] = rp->blue[y*rp->Bmpi.biWidth+x]+rp->green[y* rp->Bmpi.biWidth+x]+rp->red[y*rp->Bmpi.biWidth+x];
a++;
}
}
return 0;
}
/* ブロック分けして各ブロックの明るさを計算する */
int keisan(BMP *rp,RESULT *res){
int b,c,x,y,i=0,j=0;
for(y=0;(y+60)<rp->Bmpi.biHeight;y+=60){
for(x=0;(x+60)<(rp->Bmpi.biWidth-160);x+=60){
for(b=0;b<60;b++){
for(c=0;c<60;c++){
res->akarusa[i][j]+=res->data[(y+b)*rp->Bmpi.biWidth+(x+c)];
}
}
j++;
}
i++;
}
max(res);
return 0;
}
/* 一番明るいブロックの特定 */
RESULT *max(RESULT *res){
int MAX1=0,MAX2=0,i=0,j=0;
for(i=0;i<8;i++){
for(j=0;j<8;j++){
printf("[%d][%d]=%d",i+1,j+1,res->akarusa[i][j]);
if(MAX1<res->akarusa[i][j]){
MAX1=res->akarusa[i][j];
res->maxi=i;
res->maxj=j;
}
}
printf("\n");
}
printf("一番明るいブロックは[%d][%d]です\n",res->maxi+1,res->maxj+1);
return 0;
}
int main(void){
BMP rp={0};
RESULT res={0};
FILE *fp;
/* 画像の取り込み */
fp=fopen("LED1.bmp","rb");
ReadBmp(&rp,fp);
res.data = (unsigned char*)calloc(rp.Bmpi.biWidth*rp.Bmpi.biHeight,sizeof(char));
fclose(fp);
fp=0;
bunkatsu(&rp,&res);
keisan(&rp,&res);
return 0;
}
です。よろしくお願いします。
お礼
亀レスすぎてすいません。しばらくネットが使えない環境にいたもので... この問題ですが、何とか解決できました。おそらくMIXERCONTROL構造体の配列がおかしかったような気がしております。最近仕事でVC++を使うようになったばかりで、このようなサイトに質問するのも初めてで、まだ右も左もわからぬまま孤軍奮闘しております。的確なご指摘ありがとうございました。今後はこのことを参考にしてもう少しわかりやすい質問が書けたらと思います。どうもありがとうございました。