此錯誤只有當我建立在「自由」(釋放),執行優化的WINDDK NMAKE編譯正在發生。我無法在「檢查」構建或VS編譯中重現此操作。奇怪的內存損壞
這裏是在我的代碼發生的僞代碼:
main()
{
//variable init and other code
fprintf(log, "pre nullValue: %lu\n", NULL); //printf added for debugging
otherFunc();
funcWithError(str1, str2, NULL);
fprintf(log, "post nullValue: %lu\n", NULL);
fprintf(log, "post2 nullValue: %lu, %lu, %lu\n", NULL, 0, NULL);
}
BOOL otherFunc()
{
//variable init and other code
callToDll();
//...doing stuff
libusb_usb_open(var1); //If I remove this line there is no problem!!
//...doing more stuff
}
BOOL funcWithError(char* s1, char* s2, FUNC_PTR fp)
{
fprintf(log, "inFunc nullValue: %lu, %lu\n", NULL, fp);
if(fp != NULL)
return FALSE; //This line is being executed erroneously!!
}
輸出日誌:
預NullValue屬性:0
inFunc NullValue屬性:0,251208
後NullValue屬性:251208
post2 nullValue:251208,251208,251208
注意:重新發生的號碼(251208)是不同數量的每次程序運行
只需改變一個線修復/導致它的時間。這是libusb usb_open電話。
- 最終我的問題是要弄清楚如何解決這個問題(我無法避免調用)
- 但在堆疊/內存管理水平只是如何它甚至有可能有NULL不爲零並將文字值'0'打印爲非零?
讓我瞭解其他信息,可以幫助...
也許東西是錯誤的參數傳遞約定libusb_usb_open,這導致一些堆棧損壞。這是64位的應用程序?也許你應該使用%llu而不是%lu。最好的辦法,找出哪些是錯誤的將是調試的彙編代碼這一部分,並檢查怎麼回事。 – Zuljin 2011-05-06 23:34:36
是啊,我試圖挽救翻翻組裝,所以以爲我會發布。它在x86機器上編譯x86,所以不是64位。所以%llu什麼都不做。 – Sogger 2011-05-06 23:56:18