請求高手,大師點撥
在VC++6.0環境下,我把一個運算程式做成元件,取名為(wsxdll),在debug狀態下生成的(wsxdll.dll和wsxdll.lib)除錯通過,其外部函式也能被另一個應用程式(usewsx)正常呼叫完成運算。但同一個(wsxdll),在release狀態下生成的(wsxdll.dll和wsxdll.lib)雖也能被應用程式(usewsx)呼叫,但運算出錯。以下是一些細節說明
A.在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),
B.(wsxdll)中用了堆結構的資料變數,
我發現,用debug版的(wsxdll.dll和wsxdll.lib)時,給堆分配物理記憶體后,堆變數中的默認值正常,如整型變數的默認值是(-842150451),但用Release版的(wsxdll.dll和wsxdll.lib)時,給堆分配物理記憶體后,堆變數中的默認值不正常,如整型變數的默認值是(3736336)或(0),甚至是(-1.#QNAN)。
注:給堆分配物理記憶體和釋放分配于之的物理記憶體已在(wsxdll)中正確使用,否則debug版也通不過。
[/size]
uj5u.com熱心網友回復:
同一個庫debug和release不能共用正常,debug用的庫也要是debug版本的才行,release也一樣uj5u.com熱心網友回復:
debug版和release版分配記憶體不一樣,debug版為了除錯方便會在原有申請記憶體的基礎上多分配百分之十幾的空間;估計你程式是記憶體管理問題。
uj5u.com熱心網友回復:
-842150451= CDCDCDCD 是debug 對變數的 初始化,你自己忘了初始化。release 對變數不會初始化,所以 是 不確定值, 請 檢查 所有變數 是否 初始化 !
uj5u.com熱心網友回復:
release會做一些優化,同時會有一些初始化等。你的變數最好都有默認的初始化值
然后就是呼叫者,dll最好都是相同的debug或release版本
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/125121.html
標籤:基礎類
