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键。。。
展开
 我来答
fisher412823
2012-07-16
知道答主
回答量:19
采纳率:0%
帮助的人:20.6万
展开全部
你的getDC函数应该用错了,它返回一个句柄资源,而所有资源都要手动释放,也就是说,你每次创建一个句柄,却不去释放它,这个开销远远比你程序里所用的几个变量开销大的多.而且这个资源一般是低速io系统的资源,当你开辟的越多,自然越慢.建议将此句柄作为一个全局变量对你有好处.也不是每次都要新建句柄.
还有你在系统中用了sleep这个函数不能保证时间精度,只是给系统调度程序的一个参考值,你最好实现一个定时器.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式