C语言c++语言编程里子函数多次运行,内存释放的问题!!!
我用C语言写的SDK小程序,是一个关于通过摄像头视频捕捉车辆车牌号码的子程序试验,前面部分是固定扥构建windows窗体等代码,我省略下。。后面在主函数里我用按下键盘B来...
我用C语言写的SDK小程序,是一个关于通过摄像头视频捕捉车辆车牌号码的子程序试验,前面部分是固定扥构建windows窗体等代码,我省略下。。后面在主函数里我用按下键盘B来实现调用子函数并返回0或者1值。函数目的是通过在一秒钟时间内通过GetPixel函数先后截取两块视图存放到两个数组里,然后通过对比两个数组是否一样来确定是否发生图像移动,用对话框显示出来。
int ququyushifouyiyang(int x,int y,int xchang,int ychang,int jiangedian,int jiangetime,);//函数声明
。。。。。。。。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
int n;
switch (message)
{
case WM_KEYDOWN:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case78:if(ququyushifouyiyang(600,400,10,10,10,200)==0)MessageBox(NULL,str04,str03,MB_OK); //按下N键后,执行找移动区块的函数
else MessageBox(NULL,str05,str03,MB_OK);
break;
。。。。。。。
函数定义部分:
int ququyushifouyiyang(int x,int y,int xchang,int ychang,int jiangedian,int jiangetime,int ququyucishu)
{
COLORREF tempquyu01[10][10];
COLORREF tempquyu02[10][10];
COLORREF tempquyu03[10][10];
int x1=x;
int y1=y;
int a=0;
int b=0;
COLORREF tempdian;
for(int i=0;i<xchang;i++,a+=1,x1+=jiangedian,y1=y,b=0)
{
for(int i2=0;i2<ychang;i2++,b+=1,y1+=jiangedian)
{
tempdian=GetPixel(GetDC(0), x1, y1);
tempquyu01[a][b]=tempdian;
}
};
x1=x;
y1=y;
a=0;
b=0;
Sleep(jiangetime);
for(int i=0;i<xchang;i++,a+=1,x1+=jiangedian,y1=y,b=0)
{
for(int i2=0;i2<ychang;i2++,b+=1,y1+=jiangedian)
{
tempdian=GetPixel(GetDC(0), x1, y1);
tempquyu02[a][b]=tempdian;
}
};
if
(
(memcmp((char*)tempquyu01,(char*)tempquyu02,sizeof(COLORREF)*xchang*ychang)==0)
)return 0;else return 1;}
程序写好后通过编译运行成功,按下键盘B键,子函数成功运行,感觉时间不到一秒,可之后多次按B键运行后,程序响应时间越来越长,当第12到13次按下B键运行程序时,系统进入假死状态。。。。。我用进程管理器查看内存占用,内存占用数随着运行次数的增多也跟着飙升。。。这是为什么啊,子函数不是应该被分配到内存栈区吗?栈区内存不是在函数退出后系统自动释放吗?为什么会这样?该怎么解决啊?帮帮忙,我没分了。。。
说错了。。是按下键盘N键。。。 展开
int ququyushifouyiyang(int x,int y,int xchang,int ychang,int jiangedian,int jiangetime,);//函数声明
。。。。。。。。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
int n;
switch (message)
{
case WM_KEYDOWN:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case78:if(ququyushifouyiyang(600,400,10,10,10,200)==0)MessageBox(NULL,str04,str03,MB_OK); //按下N键后,执行找移动区块的函数
else MessageBox(NULL,str05,str03,MB_OK);
break;
。。。。。。。
函数定义部分:
int ququyushifouyiyang(int x,int y,int xchang,int ychang,int jiangedian,int jiangetime,int ququyucishu)
{
COLORREF tempquyu01[10][10];
COLORREF tempquyu02[10][10];
COLORREF tempquyu03[10][10];
int x1=x;
int y1=y;
int a=0;
int b=0;
COLORREF tempdian;
for(int i=0;i<xchang;i++,a+=1,x1+=jiangedian,y1=y,b=0)
{
for(int i2=0;i2<ychang;i2++,b+=1,y1+=jiangedian)
{
tempdian=GetPixel(GetDC(0), x1, y1);
tempquyu01[a][b]=tempdian;
}
};
x1=x;
y1=y;
a=0;
b=0;
Sleep(jiangetime);
for(int i=0;i<xchang;i++,a+=1,x1+=jiangedian,y1=y,b=0)
{
for(int i2=0;i2<ychang;i2++,b+=1,y1+=jiangedian)
{
tempdian=GetPixel(GetDC(0), x1, y1);
tempquyu02[a][b]=tempdian;
}
};
if
(
(memcmp((char*)tempquyu01,(char*)tempquyu02,sizeof(COLORREF)*xchang*ychang)==0)
)return 0;else return 1;}
程序写好后通过编译运行成功,按下键盘B键,子函数成功运行,感觉时间不到一秒,可之后多次按B键运行后,程序响应时间越来越长,当第12到13次按下B键运行程序时,系统进入假死状态。。。。。我用进程管理器查看内存占用,内存占用数随着运行次数的增多也跟着飙升。。。这是为什么啊,子函数不是应该被分配到内存栈区吗?栈区内存不是在函数退出后系统自动释放吗?为什么会这样?该怎么解决啊?帮帮忙,我没分了。。。
说错了。。是按下键盘N键。。。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询