(原)Vs中debug和release结果不一致
转载请注明出处:
http://www.cnblogs.com/darkknightzh/p/5598091.html
前两天调试程序,出现了一个很蛋疼的问题,debug和release结果不一致。网上很多都说是变量没有初始化,但是我这边变量已经初始化了。
最后仔细检查,找到了debug和release下代码结果不一致的地方。将该部分代码提取并简化,如下所示:
int MatrixPlusDiagVec(float* pMat, const float* pVec, int dim)
{
for (int i = ; i < dim; ++i)
{
pMat[i * (dim + )] += pVec[i];
}
return ;
} void ShowRowRes(const float* data, int len)
{
for (int i = ; i < len; ++i)
{
cout << i << ' ' << data[i] << endl;
}
} int main()
{
int num = ;
float* pa = new float[num * num];
memset(pa, , sizeof(float) * num * num); float* pb = new float[num * num];
for (int i = ; i < num; ++i)
{
pb[i] = (i + ) * ;
} MatrixPlusDiagVec(pa, pb, num); ShowRowRes(pa, num); delete[] pa;
delete[] pb; system("Pause"); return ;
}
其实是很简单的代码,就是将一个向量中的元素放到一个矩阵对角线上,但是debug和release结果就是不一致。调用ShowRowRes后,由于显示第一行结果,应该只有第一个元素非0,其他都是0。Debug下正常,release下前4个结果都不对。
Debug显示第一行结果如下:
Release显示第一行结果如下:
Release显示第二三四行均为0,显示第5行结果:
上述程序中float改为int后,release下结果依旧不正常。
后来将MatrixPlusDiagVec函数中
pMat[i * (dim + 1)] += pVec[i];
改为
pMat[i * (dim + 1)] = pMat[i * (dim + 1)] + pVec[i];
或者
pMat[i * dim + i] += pVec[i];
或者在pMat[i * (dim + 1)] += pVec[i];之后加上一句cout,
或者使用vs2015编译程序,
结果都正确。无论如何也理解不了为啥。
由于不会看反汇编代码,所以就不看了。
之后有人看了我用的vs的版本,如下:
建议更新到update5,更新了之后,也没有问题了。如下:
因而,猜测原因应该是vs2013我用的那个版本的bug吧。
所以,如果程序无论如何也理解不了debug和release为啥结果不一致,那就。。。额,更新一下IDE吧。这个锅,只能IDE背了。
(原)Vs中debug和release结果不一致的更多相关文章
- C++中debug和release的区别 . 转载
vc中debug和release的不同 收藏 在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当 ...
- vs中debug和release的区别你知道吗
在Visual Studio中,生成应用程序的时候有2种模式:Debug和Release.两者之间如何取舍呢? 一.vs中debug和release的区别 1.Debug 通常称为调试版本,它包含调试 ...
- Visual Studio中Debug与Release以及x86、x64、Any CPU的区别
Visual Studio中Debug与Release的区别: 在Visual Studio中,编译模式有2种:Debug与Release.这也是默认的两种方式,在新建一个project的时候,就已经 ...
- Visual Studio中Debug与Release以及x86、x64、Any CPU的区别 &&&& VS中Debug与Release、_WIN32与_WIN64的区别
本以为这些无关紧要的 Debug与Release以及x86.x64.Any CPU 差点搞死人了. 看了以下博文才后怕,难怪我切换了一下模式,程序就pass了.... 转载: 1.https://ww ...
- vs中debug和release版本的区别(转)
vs中的程序有debug和release两个版本,Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发 人员提供强大的应用程序调试能力.而Rel ...
- VS中Debug与Release、_WIN32与_WIN64的区别
一.Debug与Release 1. 区别 Debug——调试版,生成的.exe中包含很多调试信息,若直接发包,比较大: Release——发布版 2. 如何区分是Debug编译还是Release ...
- Visual Studio中Debug和Release的区别
在Visual Studio中,生成应用程序的时候有2种模式:Debug和Release.两者之间如何取舍呢? 假设有这么简单的一段代码,在主程序中调用方法M1,M1方法调用M2方法,M2方法调用M3 ...
- VS系列软件中debug和release编译环境有什么区别
当编译和执行一个工程时,可以在Debug和Release两种配置下执行. Debug模式用于调试程序,这是个受保护的运行环境,它将告诉你程序是否有泄露,在运行时也能对特定函数的结果进行检查.然而它生成 ...
- Android Studio中debug和release模式默认的参数配置
The possible properties and their default values are: debuggable:表示是否可以在手机上调试程序. 在Eclipse中,只有android ...
随机推荐
- 安装hadoop1.2.1集群环境
一.规划 (一)硬件资源 10.171.29.191 master 10.173.54.84 slave1 10.171.114.223 slave2 (二)基本资料 用户: jediael 目录 ...
- file_get_contents 获取不了网页内容
服务器在做验签的过程中,经常需要向渠道服务器获取某个用户的信息.一般有两种方法,curl和file_get_contents. 一般情况下,像这样用,不会有问题. public function Oa ...
- var_export函数的使用方法
var_export() 函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码.var_export必须返回合法的php代码, 也就是 ...
- 手机user agent大全下载 整理发布一批移动设备的user agent【分享】
手机user agent大全下载 整理发布一批移动设备的user agent[分享] 很多人朋友在玩浏览器的时候 或者写软件的时候需要用到 user agent 这个东西 修改这个 可以使自己的浏览器 ...
- linux 文件类命令笔记
看一下linux的教程,不错,由于只看鸟哥有点空洞,于就是找了个视频教程,边看边学 对比了几个教程,http://edu.51cto.com/course/course_id-32.html这个教程相 ...
- Hql 子查询
直接上代码: public virtual IList<VoucherLog> GetMaxResultVoucherLog() { string orgaizationCode = Ht ...
- ACdream 1017 Fast Transportation
http://acdream.info/problem?pid=1017 题意:给n个点,m条边,K个货物,要从从S到T,每天每条边最多只能经过1次,求要几天能运完 思路:拆成分层图,每层向下一层连边 ...
- LeetCode_Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- wikioi1191 数轴染色
题目描述 Description 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色.接着 我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色.请输出每个操作执行后 剩余黑色点的个 ...
- Jquery 概念性内容编辑器
概念性jQuery内容编辑器,这是一款非常有特色的jQuery编辑器,该编辑器支持文字.列表.视频.引用等功能,是一款小巧简洁,富有个性化的jQuery内容编辑器插件. 代码: <!doct ...