2 wessex2010 wessex2010 于 2016.09.22 15:23 提问

同一个动态链接库,debug版行了,但release版不行

请求高手,大师点拨

在VC++6.0环境下,我把一个运算程序做成动态链接库,取名为(wsxdll),在debug状态下生成的(wsxdll.dll和wsxdll.lib)调试通过,其外部函数也能被另一个应用程序(usewsx)正常调用完成运算。但同一个(wsxdll),在release状态下生成的(wsxdll.dll和wsxdll.lib)虽也能被应用程序(usewsx)调用,但运算出错。以下是一些细节说明
◆在release状态下编译(wsxdll)虽通过,但有warning
Linking...
Creating library Release/wsxdll.lib and object Release/wsxdll.exp
LINK : warning LNK4089: all references to "GDI32.dll" discarded by /OPT:REF
wsxdll.dll - 0 error(s),
◆(wsxdll)中用了堆结构的数据变量,
我发现,用debug版的(wsxdll.dll和wsxdll.lib)时,给堆分配物理内存后,堆变量中的默认值正常,如整型变量的默认值是(-842150451),但用Release版的(wsxdll.dll和wsxdll.lib)时,给堆分配物理内存后,堆变量中的默认值不正常,如整型变量的默认值是(3736336)或(0),甚至是(-1.#QNAN)。
注:给堆分配物理内存和释放分配于之的物理内存已在(wsxdll)中正确使用,否则debug版也通不过。

2个回答

fulcrumtech
fulcrumtech   2016.09.22 15:35

vc6的debug版本和relesae版本在代码逻辑上有一些区别,debug版本在分配内存后,会把内存用字节值“CD”填充,如果按4字节有符号整形解释,就是-842150451(CDCDCDCD),以便于跟踪内存泄露,但release版本不会初始化分配的内存,里面的内容是前一个使用过此内存的应用遗留下来的,所以需要增加初始化内存的代码,保证debug和release的一致性。

oyljerry
oyljerry   Ds   Rxr 2016.09.22 21:24

vc有一个简单原则。就是debug调用debug dll。同样release也是

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Debug版本下能运行而Release下不能运行的问题总结
引言      如果在您的开发过程中遇到了常见的错误,或许您的Release版本不能正常运行而Debug版本运行无误,那么我推荐您阅读本文:因为并非如您想象的那样,Release版本可以保证您的应用程序可以象Debug版本一样运行。 如果您在开发阶段完成之后或者在开发进行一段时间之内从来没有进行过Release版本测试,然而当您测试的时候却发现问题,那么请看我们的调试规则1: 规则1: 经常性
Mr.Smile填坑记——微博、微信debug、release版本切换不能分享
平时测试的时候一般都用的是debug包,所以开始的时候微博,微信开放者平台注册的签名都是debug的; 当发布版本的时候,我们需要从debug切换到release版本,因此,平台上的签名也要同时替换 微博来说,只要更换release的签名就OK ,立竿见影 微信相对来说就坑了,如果你的手机之前装过debug的版本,那么微信回去记录你的签名,所以在你切换到 release的签名后,你的手机会判断签
Debug 运行正常,Release版本不能正常运行的相关详解
引言      如果在您的开发过程中遇到了常见的错误,或许您的Release版本不能正常运行而Debug版本运行无误,那么我推荐您阅读本文:因为并非如您想象的那样,Release版本可以保证您的应用程序可以象Debug版本一样运行。 如果您在开发阶段完成之后或者在开发进行一段时间之内从来没有进行过Release版本测试,然而当您测试的时候却发现问题,那么请看我们的调试规则1: 规则1: 经常性
VC++6.0 Debug模式与Release模式的区别
    今日开会,老高谈及了VC++6.0中有关Debug与Release的不同。简单的就不说了,最重要的是Debug模式下变量的地址是固定的,而Release模式的变量地址则不然。归根到底,是由于Debug模式的变量地址由VC编译器负责分配,而Release模式的变量地址是由操作系统分配的。这也解释了为什么在Debug模式时可以运行的程序,在Release模式下可能根本无法执行。    我目
VC在debug运行正常,release崩溃的解决办法
在调试程序的时候经常遇到一个问题:debug版运行的很正常,查不出任何问题,到了release版,运行一会儿就崩溃了。最近一段时间查了很多资料,终于是找到了原因所在。讲解如下:     遇到这种问题,要查查系统中是否定义了消息捕获和触发函数(我的程序就是这个问题),如果你的程序中没有定义消息,也没有定义消息捕获和触发函数,那就不好意思,我没有遇到这个问题,所以没有研究过,非常抱歉(你可以查看一下
浅谈DEBUG版本与RELEASE版本
DEBUG版本通常是项目处理调试阶段的一种过渡版本,它
VC程序Debug版本和Release版本运行不一致问题
最近写了个VC小软件,调试发现debug和release下运行结果不一致。       查了半天发现好像是new的堆内存未释放导致的问题(不确定,但是delete []buf;后不一致问题解决了)。      第一次发现这个问题,特意记录下。      网上搜索的其他可能导致不一致的情况:  1. 对变量的初始化不一致或未初始化。例如,char字符串匹配,在Debug正常,而Release
MFC中Debug模式能够运行成功,但Release版本不能运行成功。
原因:Debug中使用到的函数,Release版本中可能不能使用。如:CString 类中GetAllocLength ()。
VS的Debug模式没问题,而Release模式却有问题
在Debug模式下程序执行没有问题,包括内存泄露也没问题,而到matlab调用debug模式下的DLL,却存在一些问题!我发现在vs的Release模式却有问题,从这里可以看出,matlab调用VS的DLL,最好将VS在release模式下生成DLL再供matlab调用。主要发现问题所在有以下几处,1.对于程序中的某些变量赋初值,指针赋NULL,以避免一些问题。2.我发现我程序用了realloc这
关于release版本和Debug 版本的问题 终结
============================================== 这 release 和 debug 2个版本的代码出现的问题 我个人觉得有必要整理一下,更好的帮助朋友们 以下内容有 以前朋友的回帖,也有网上找到的 还有一少部分我个人的经验。 希望大家不要水掉这个帖子,把自己的经验多分享 多添加一些,谢谢。 ========================