MFC+OpenCV Debug正常Release模式下記憶體錯誤
出現這樣的問題多半是自己程式碼有問題,需要仔細排查
我的問題如下:
frame為Mat
pResult為IplImage
之前用如下方式拷貝影象
pResult = &IplImage(frame);
而MFC的Release模式下frame的記憶體會被自動回收掉,pResult會發生記憶體錯誤
奇怪的是同樣的程式碼在控制檯應用程式的Release模式中執行正常
修改為以下程式碼可解決:
IplImage imgTmp = frame;
pResult = cvCloneImage(&imgTmp);
這裡cvCloneImage為影象的深拷貝,使用前不用為pResult分配記憶體,該函式會自動開闢一片記憶體
如果處理視訊,注意每幀使用結束後要釋放pResult的記憶體,否則會造成記憶體洩露
如果沒有這樣的問題或者不想修改程式碼可將VS設定中
屬性 ——> C/C++ ——> 所有選項 ——> 優化
由使速度最大化(/O2) 改為已禁用(/Od)
可保證Release模式執行效果和debug模式一致
但不推薦這樣做,這樣做的代價是失去了Release優化的意義
還是儘量排查程式碼中存在的問題
相關推薦
MFC+OpenCV Debug正常Release模式下記憶體錯誤
出現這樣的問題多半是自己程式碼有問題,需要仔細排查 我的問題如下: frame為Mat pResult為IplImage 之前用如下方式拷貝影象 pResult = &IplImage(frame); 而MFC的Release模式下frame的記憶體會被自動回收掉
Android Studio靈活配置debug和release模式下的APPKEY
我們一般要在AndroidManifest.xml檔案中定義三方平臺的appkey,appid等屬性值,類似下面的程式碼 <meta-data android:name="UMENG_APPKEY" android:value="
iOS: 如何判斷程式碼執行在DEBUG還是RELEASE模式下?
首先確定下專案的 Build Settings 是否已經設定過巨集定義 DEBUG,如何看呢? 點選 Build Settings ,然後在搜尋框裡輸入‘macros’ 如果已經設定過,在 Preprocessor Macros 的 Debug 後面會有 DE
談在Debug和Release模式下輸出除錯資訊 .
在除錯程式時,有時候設定斷點單步執行並不能查出問題的所在,比如程式可能在執行一段時間後死掉了,或者對於Release版本執行不正常等等原因吧,這時需要通過設定一些輸出資訊,來幫助定位錯誤發生的位置,這點非常有用。根據個人程式設計習慣,我通常都會在程式編寫過程中適當地加入一些輸出資訊。 1、輸出巨
在Debug模式下中斷, 在Release模式下跳出當前函數的斷言
clas for spa sso asm ack func comm return 在Debug模式下中斷, 在Release模式下跳出當前函數的斷言 #ifdef DEBUG #define __breakPoint_on_debug asm("in
OpenCV與Debug和Release模式
機器 運行速度 com 環境 使用 行為 style atl cnblogs 1、Release和Debug的區別 Release版稱為發行版,Debug版稱為調試版。 Debug中可以單步執行、跟蹤等功能,但生成的可執行文件比較大,代碼運行速度較慢。Relea
iOS下Debug和Release模式
感謝rectinajh總結 這裡搬運一下: 一、Debug是除錯版本,包括的程式資訊更多,Debug通常稱為除錯版本,通過一系列編譯選項的配合,編譯的結果通常包含除錯資訊,而且不做任何優化,以為開發人員提供強大的應用程式除錯能力。 二、只
Release模式下無法調試打印對象的解決方式
png ima xcod spa release 技術 ont eas 忘記 之前碰到在release模式下無法打印對象的問題,只能切換到debug模式下調試, xcode release 模式下, 會關掉斷點讀取變量的上下文環境,以提高運行速度, ?? 記得調試
設定VS201X release模式下可單步除錯
在vs Debug模式下可以對程式碼進行單步除錯,檢視結果。release模式下是否也可以進行除錯呢? 答案是:yes! 下面以vs2012為例,設定release模式進行單步除錯: 1.專案---右鍵---屬性 2.配置選擇 release 3.c/c++---常規--
自動打包-debug 和 release 模式,並自動生成包名
1. 我們在工作的時候,經常遇到測試的程式,但是測試程式只適合除錯使用,不能參與線上釋出。為了達到這個要求。我們通常定義一個靜態全域性變數。來控制測試程式碼和線上程式碼。 之前找了好多資料,都特別複雜,之後找到一個易用實用的方法。一句話程式碼: UavStaticVar.is
VS.NET2008在Release模式下怎麼能對某行程式碼不進行優化呢
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] st = sc.nextLine().split("
log4net在release模式下無法生成檔案或不寫入日誌
在Debug模式一切正常,但是在release模式下log4net不工作,查了很多資料,終於解決。具體做如下檢查修改。 1、檢查log4net寫入日誌檔案路徑是否正確; 2、檢查對應日誌檔案路徑是否有許可權; 3、檢查程式log4net配置獲取路徑; 最常見的問題是第三步,一般都是在AssemblyI
VS中Release模式下生成去掉生成pdb檔案
前幾天釋出專案,有時候就釋出那幾個dll,但是一個dll同時還有一個pdb檔案,而且pdb檔案貌似還挺大。全選的話,要複製多一份pdb檔案到伺服器,上傳時間長。不全選,就要按住ctrl,再點選每個dll,每次都麻煩得很呀,我想release下,應該可以去掉pdb檔案生成。然後
Swift Release模式下遮蔽NSLog()
1、首先在Build Settings中找到 Swift Compliler-Custom Flags,並新增以下引數 -DDEBUG引數,如下圖: 2、建立Log.swift檔案並實現下面的
C\C++如何在程式碼中區分Debug或者Release模式
1、在Windows下,在VS中或者在使用MinGW作為編譯器時,在Release模式下會自動定義一個巨集NDEBUG,Debug模式下沒有,因此可以在在程式碼中判斷巨集NDEBUG是否存在來判斷是Re
[iOS/Swift]在Release模式下(或者Archive時)關閉後臺列印操作
在 Object-C 的工程中,預設會在 Build Settings 中的 Apple LLVM x.x - Preprocessing 的 Preprocessor Maros / Debug 中新增 “DEBUG=1“ 的定義,這樣我們就可以通過 #ifdef、 #i
Android在debug和release模式自動載入不同的配置檔案
思路: 1. 判斷當前執行在何種模式下 2. 載入配置檔案 1. 判斷當前執行在何種模式下 當直接在eclipse中執行程式和android tools工具打包時候,會自動修改gen/**/BuildConfig.java中的欄位DE
在release模式下使用vector下崩潰的問題
昨天遇到一個奇怪的問題,在debug下除錯完成的程式,在release模式下總會崩潰,由於release除錯跟蹤功能偏弱,跟蹤數遍之後才發現是在一個vector的push_back時出現異常。 一般有三種情況: 1、在vect
VS的Release模式下進行除錯的VS修改和cmake修改
在有的情況下,我們可能不能直接利用Debug模式進行程式除錯,那麼如何在Release模式下進行程式除錯呢? 一、VS下修改方法
OpenCV 和 VS 2015 C++ 再release的除錯模式下出現 exception 0xC0000005
thanks that helped, by mistake I set the same lib under the Linker settings for Debug and Release settings. After I changed opencv_wor