VS程序debug和Release结果不同时的一些解决办法

今天在调试MFC代码的时候遇到了debug和release下运行结果不同的问题, 仔细检查了2小时才发现原来是一个函数调用写错了:

不慎将memcpy打成了memccpy, 

编译运行都没有问题,但是运行的时候总有异常。

原来

void * memccpy(void *dest, const void * src, int c, size_t n);

函数说明:memccpy()用来拷贝src 所指的内存内容前n 个字节到dest 所指的地址上。

void *memcpy(void *destin, void *source, unsigned n); 只有三个参数。

如果只传了3个参数给 memccpy, 那么这一段的数据会陷入混乱, 并且debug和release下运行的结果也不同,都是不正确的。

 

我就顺便总结一下我以前也遇到过这类问题的解决办法吧, 欢迎大家交流、补充。

二)内存溢出

debug模式下 较大的数组或结构体分配的地址通常不是连续的, 如果往数组里写数据溢出了,在debug模式下会写到一些无用的区域, 但是Release模式下很可能会写到别的相邻的数组中,打乱了别的数组里的数据。

这时从结果来看,就会出现一些随机的异常。

三)变量未初始化

由于Release模式下无法打断点,我们可以把结果输出到本地文档,

用下面的代码在release模式测试一下:

    int a,b;
    a = b;

    {
        FILE* fp = fopen("D:\\1.txt","a");
        if (fp == NULL)
        {
            return;
        }
        fprintf(fp,"a= ");
        fprintf(fp,"%d",a);
        fclose(fp);
    }

执行后,打开对应的 txt文档看到 a= 11088576, 程序随机分配了一个很大的数给a。

如果是debug模式呢?

程序会报警,这也是vs的一个优点。但如果在别的IDE上也可能不会报错。

这也会造成隐患,使Release的程序运行异常。

 

 

综上所述,如果程序运行在debug和release下的结果不同,那就要仔细检查代码了。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值