首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

MCI使用有关问题

2013-10-12 
MCI使用问题1、现象描述:使用mciSendCommand播放avi文件。以前一直使用没有出现过问题,最近在debug下是正常

MCI使用问题
1、现象描述:使用mciSendCommand播放avi文件。以前一直使用没有出现过问题,最近在debug下是正常的,但在Release下面不同的电脑显示不太一样,有些只能显示几个avi文件,多少完全不同。
2、调试信息:调试结果提示的错误信息为不能创建或使用窗口。我的显示形式为将几十个avi文件在同一个view中显示,前面几个都是正常显示的,到后面就出错了。如果显示十几个在自己的电脑上是正常的。

avi mci
[解决办法]
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!

[解决办法]
很多越界访问错误在debug版中不会暴露出来,在release版中就原形毕露了。
[解决办法]
判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。

#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}

[解决办法]
大概是缓冲区使用之前没有初始化为全0。

热点排行