我一直在使用本徵在我的軟件,我今天碰到的一個問題,造成從建立在靜態庫動態庫改變我的代碼Windows,使用Visual Studio 2013.此開關的原因與Eigen無關。內存對齊錯誤2013
我嵌入徵在自己的庫文件,其本身然後鏈接到我的應用程序(一個或多個)。如前所述,這個圖書館直到今天一直是一個靜態圖書館;我剛更新我的代碼庫來生成一個DLL文件。
由於此更改,我現在從Visual Studio收到以下錯誤信息:
功能塊在--------------------被由對齊例程分配,使用_aligned_free()
(這個消息每次彈出多次不同的地址;我用上面的破折號,因爲我不認爲具體的地址與這個問題有關)。
選擇「重試」打開調試器對Memory.h
視覺工作室智能感知(未調試時)線255表明,EIGEN_ALIGN和EIGEN_HAS_MM_MALLOC都定義爲1,EIGEN_MALLOC_ALREADY_ALIGNED和EIGEN_HAS_POSIX_MEMALIGN都是未定義的。因此,它應該運行_mm_free(ptr),它(基於IntelliSense的再次)是_aligned_free(a)的別名。因此,看起來這個代碼應該運行正確的功能,但事實並非如此。
當我更改代碼回靜態庫,這個問題就會消失。
我從衆多的Google搜索中發現的唯一遠程相關內容是英特爾Fortran編譯器的一篇文章,它說這個錯誤消息可能來自於一個庫,它是在早期版本中編譯的,並由最新版本編譯的代碼調用。除了我正在使用Visual Studio C++ 2013的事實之外,我已經多次重新編譯代碼,以確保它完全從乾淨狀態重新編譯,並且此錯誤消息仍然存在。
我已經從網上下載善變回購(默認分支)最新的代碼,但這並沒有解決問題。
我試圖像徹底,因爲我可能會。如果您需要更多信息,請告訴我。
編輯:
此外上下文:
'客戶代碼',其利用在這種情況下,DLL是谷歌測試;在測試期望值之後引發錯誤消息 - 即DLL文件中的類正在運行析構函數來清理臨時對象。在驅動程序的應用程序,我沒有試圖做這樣的DLL文件分配內存,邪惡的東西,然後解除分配 - 這是部分原因,我覺得這是這麼混亂....
你確定DLL和使用該DLL的客戶端已經構建相同嗎?我正在大聲思考 - 現在它是獨立的,DLL正在做mallocs並以一種方式釋放,客戶端可以做其他事情。通常由於這個原因,它不適合客戶端在DLL中創建的對象上調用free。通常你從DLL中導出清理(即免費)例程,以便客戶端可以調用這些例程而不是直接執行。對象創建也是如此。 – 2014-10-06 19:29:28
@MichaelPetch我很確定他們是一樣的。當然,DLL和靜態庫是相同的(我只改變一個設置)。另外 - 我沒有從客戶端免費調用 - 有問題的代碼是DLL清理代碼。就我而言,客戶端是Google Test,它正在對庫中的代碼進行單元測試;在應該調用臨時特徵矩陣析構函數的地方達到了斷點。我會更新這個問題並澄清這一點,以利於他人。我看到這在之前並不清楚。 – 2014-10-06 20:03:48