热情软件屋

 

在VC环境下一切正常,但单独运行编译后的EXE文件时就出现非法操作


编号:QA003712
建立日期: 2000年12月27日 最后修改日期:2002年3月24日
所属类别:

LinXuan:
    用VC调试程序时,在VC环境下一切正常,但单独运行编译后的EXE文件时,就出现非法操作,内存冲突。请问可能的原因是什么?

回答:

    可能的原因很多,我最常遇到的有两种:
    1、程序中从启动目录中读入文件。在VC++集成环境中,默认的启动目录是工程所在的目录,而你单独运行时启动目录通常是EXE所在目录,如Debug或Release目录。
    2、程序使用Debug方式编译,拷贝到安装有不同版本VC++的机器上运行,因为不同版本的VC++的Debug运行库不兼容,会导致非法操作。
    3、Release方式程序要进行优化,而Debug方式程序不进行优化。
    可能还有其他原因,欢迎指教。
    
    John Han的意见:
    还可能是变量初始化的问题。在DEBUG下,编译器为你的所有变量做了初始化(整形为0,指针为NULL等),但是在Release下,编译器不在初始化变量(值是随机的)。所以如果你自己没有初始化变量却去判断它的值,会导致问题。还有可能是调用动态连接库是声明的参数个数不对导致堆栈溢出(DEBUG下编译器会调整和检查堆栈,不会出错)。
    
    sapphire的意见:
    或许有一种情况,用NEW分配的区域在D模式下不会越界报警,但是编译以后就会有。或者是LPCTSTR转换成LPTSTR但是没有进行声明。这种情况在有的情况下出现。
    
    wudaqiang的意见:
    可能是某个buf的大小定义的太小了,而实际写入的数据长度超过定义的大小,仔细检查一下。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio