Visual C++ MFC
マルチスレッドでプログラムを作っています。
アクセス違反0xC0000005
ヒープが壊れました
このいずれかのエラーが時折起き、解決したいです。
これらのエラーが起きる位置にコメントしておきました。
またソースが長く関連がありそうな部分を抜き出しましたがそのさいに(){}の数が一部ずれてかもしれません。確認しましたが見逃していたらすみません。
エラーなくデバックが成功する場合もあれば、コメントした部分でエラーが起きることもあります。
原因解決策等ございましたらアドバイスよろしくお願いいたします。
AfxBeginThread(AAA,pSample);で
スレッドを作り以下の処理を行います。
UINT CSampleDlg::AAA(LPVOID pParam){
CSampleDlg* p = (CSampleDlg*)pParam;
for(int i=0;i<50;i++){
p->JOY=p->klrf.LRF(p->joy_angle);//klrfはクラスLRFTHRADでCSampleDlgで宣言していますたまにアクセス違反になります。
p->TILT = p -> klrf.tilt;
}
return 0;
}
class LRFTHREAD
{
public:
LRFTHREAD(void);
~LRFTHREAD(void);
int LRFdistancce(double angle);
double sasa();
int Pattern;
double tilt;
int WoR(long x1,long y1, long x2,long y2,int S_th);
FILE* fplrf;
};
LRFTHREAD::LRFTHREAD(void)
{
TRACE("LRF開始\n");
tilt=0;
}
LRFTHREAD::~LRFTHREAD(void)
{
urg_close(&urg);
//fclose(fp5);
}
int LRFTHREAD::WoR(long x1,long y1, long x2,long y2,int S_th){
//パターン分け
double WIDTH;
int shape;
int W;
int Pattern2;
long XX1;
long YY1;
double XXYY;
XX1 = (x1+x2)/2;
YY1 = (y1+y2)/2;
XXYY= sqrt(pow((double)XX1,2.0)+pow((double)YY1,2.0));
if(S_th==2){
tilt=(double)(y1-y2)/(double)(x1-x2);//アクセス違反になります
abs(tilt)<15 && XXYY<1500)Pattern2=2;
else Pattern2 =3;
WIDTH = sin(rad)*sqrt(pow((double)(x1-x2),(double)2)+pow((double)(y1-y2),(double)2));
return Pattern2;
}
return 1;
//
}
int LRFTHREAD::LRFdistancce(double angle){
//tilt=0;///////////////////////////コメントアウト外すとアクセス違反
//
count2_1=//適当に整数を入れています
fplrf = fopen("LRF34131.csv","a");//たまにアクセス違反となります
switch(count_2-1){
case 0:
pattern =1;
break;
case 1:
pattern =2;
break;
case 2://
pattern = WoR(-obj_y[0],obj_x[0], -obj_y[1],obj_x[1],count_2-1);
break;
}
Ms=(double)clock()/1000;
FE = fprintf(fplrf," ,%lf,%d,%lf,%ld,%ld,%ld,%d,%d,%d\n",Ms,i,-radian[i-D]*180/3.14,length[i-D],-y[i-D],x[i-D],count_1,check,count_2); FE = fprintf(fplrf," ,%lf,%d,%lf,%ld,%ld,%ld,%d,%d,%d,%lf,%lf\n",Ms,i,-radian[i-D]*180/3.14,length[i-D],-y[i-D],x[i-D],count_1,check,count_2,-obj_y[count_2-1],obj_x[count_2-1]); if(FE < 0)TRACE("fprintf %d\n",FE); else FE = fprintf(fplrf,"\n,時間,i,角度,距離,y,x,count_A,check,count_B,obj_x,obj_y\n"); FE = fflush(fplrf); for(int i = 0;i < count_2; i++){ if(i==0){fprintf(fplrf,"pattern ,%d,tilt ,%lf\n,,obj_x,obj_y\n",pattern,tilt); fflush(fplrf); } fprintf(fplrf,"i,%d,%lf,%lf\n",i,obj_x[i],obj_y[i]); fflush(fplrf); fclose(fplrf); TRACE("\n"); free(length_data); //urg_close(&urg); return pattern;
}
あなたの回答
tips
プレビュー