代碼:
//獲取檔案版本號
unsigned AMajor, AMinor, ARelease, ABuild;
DWORD InfoSize;
unsigned int uiLen;
UnicodeString ucsTmp = ParamStr(0);
VS_FIXEDFILEINFO * pstFix = new VS_FIXEDFILEINFO;
BYTE * pBye = new BYTE[InfoSize];
InfoSize = GetFileVersionInfoSize(ucsTmp.w_str(),NULL);
bool bRet = GetFileVersionInfo(ucsTmp.w_str(),NULL,InfoSize,(LPVOID)pBye);
if (bRet) {
ucsTmp = "\\";
bRet = VerQueryValue((LPVOID)pBye, ucsTmp.w_str(), (LPVOID *)(&pstFix),PUINT(&uiLen) );
if (bRet) {
unVersion unV;
unV.dwVersion = pstFix->dwFileVersionMS;
AMinor = unV.st.usHi;
AMajor = unV.st.usLo;
unV.dwVersion = pstFix->dwFileVersionLS;
ABuild = unV.st.usHi;
ARelease = unV.st.usLo;
lbVersion->Caption = Format("產品版本: %d.%d.%d.%d",ARRAYOFCONST((AMajor, AMinor, ARelease, ABuild)));
}
}
//delete pstFix;
delete []pBye;
問題:
倒數第二行,釋放 結構體 pstFix出錯,出錯圖片如下:
uj5u.com熱心網友回復:
你的第6行和第7行換一下位置還會不會出錯uj5u.com熱心網友回復:
試過了,出錯,而且是同樣的錯誤!!!uj5u.com熱心網友回復:
都沒有什么人關注? 自己頂上.....uj5u.com熱心網友回復:
我想你要delete的,應該是 “VS_FIXEDFILEINFO * pstFix = new VS_FIXEDFILEINFO;”中new的這個VS_FIXEDFILEINFO,要考慮的是,當執行“bRet = VerQueryValue((LPVOID)pBye, ucsTmp.w_str(), (LPVOID *)(&pstFix),PUINT(&uiLen) );”后,pstFix的值(地址)還是原來new VS_FIXEDFILEINFO得到的地址值嗎?這里pstFix應該不需要分配記憶體,執行VerQueryValue函式后,pstFix就指向了一個VS_FIXEDFILEINFO結構的地址。還有,在“BYTE * pBye = new BYTE[InfoSize];”時,InfoSize還沒有獲得初始值。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63008.html
標籤:基礎類
上一篇:DCOM服務器怎么注冊成中文??
下一篇:求助簡單回圈佇列問題,c++
