2012-03-03 67 views
0

我正在寫一個使用winpcap發送RAW Socket的程序,一切看起來都OK,數據包已經成功發送。但是當發送行爲已經結束,則Windows顯示一個對話框,告訴我:主函數返回導致異常

SendRawSocketsConsole.exe has stopped working 

和細節是:

Problem signature: 
    Problem Event Name: APPCRASH 
    Application Name: SendRawSocketsConsole.exe 
    Application Version: 0.0.0.0 
    Application Timestamp: 4f51de63 
    Fault Module Name: ntdll.dll 
    Fault Module Version: 6.1.7600.16915 
    Fault Module Timestamp: 4ec49caf 
    Exception Code: c0000005 
    Exception Offset: 00055401 
    OS Version: 6.1.7600.2.0.0.256.1 
    Locale ID: 2052 
    Additional Information 1: e8ad 
    Additional Information 2: e8adce1c2b9e7be834b4063ac3c53863 
    Additional Information 3: e8ad 
    Additional Information 4: e8adce1c2b9e7be834b4063ac3c53863 

Read our privacy statement online: 
    http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409 

If the online privacy statement is not available, please read our privacy statement offline: 
    C:\windows\system32\en-US\erofflps.txt 

我調試的程序,發現程序在該行終於停了下來( ):

if (pHead == NULL) 
{ 
    *errno_tmp = ENOMEM; 
    RTCCALLBACK(_RTC_FuncCheckSet_hook,(1)); 
} 

dbgheap.c,和errno_temp值是零,這引起了錯誤,我不知道什麼情況下可能會導致錯誤,我試圖建立release而不是debug,但仍然失敗,任何人都可以提供任何想法?任何幫助讚賞。即時通訊使用VS2008和Win7 :)

+3

崩潰像這通常預示着某種內存損壞的地方在你的程序。檢查您的代碼是否存在與動態內存相關的越界訪問和其他錯誤。 – ComicSansMS 2012-03-03 09:56:40

+0

感謝您的回覆,但是當我使用VC++ 6.0編譯程序時,沒有發生任何錯誤,它很奇怪@ComicSansMS – Searene 2012-03-03 10:27:03

+1

這是典型的這種錯誤。你可能在VC6中很幸運,它沒有觸及任何重要的數據。這就是讓他們很難調試的原因:你永遠無法確定他們隱藏的地方。 – ComicSansMS 2012-03-03 10:35:16

回答

0

的一點是:seudo = new unsigned char(sizeof(P_HDR) + strlen(dump));,應該是 seudo = new unsigned char[sizeof(P_HDR) + strlen(dump)];

+0

也謝謝你@ComicSansMS,它確實是一個內存腐敗。 – Searene 2012-03-03 13:56:29