2010-01-16 67 views
-1

使用WinPCap項目。試圖做一些基本的指針和內存操作,並有很多錯誤。奇數內存錯誤 - 錯誤Alloc

我已經包含了兩條線,我試圖與包含一起運行。 另一個VSC++項目中的相同行很好。這是我得到

錯誤
在 pktdump_ex.exe在0x75a79617

未處理的異常:微軟C++ 例外:性病:: bad_alloc的內存在位置 .. 0x0012f8e4

#include <stdlib.h> 
#include <stdio.h> 
#include <iostream> 
#include <string> 
#include "DataTypes.h" 
#include <sstream> 

#include "EthernetLayer.h" 

#include <pcap.h> 

int* testPointer = new int[2]; 
delete[] testPointer; 

編輯: 找到一些有用的東西。 以下代碼片段是造成winpcap庫崩潰的原因。

EthernetStructPointers* testData; 
testData = (EthernetStructPointers*)pkt_data; 

EthernetStruct newData; 
memcpy(newData.DEST_ADDRESS, testData->DEST_ADDRESS, 6); 

這些是結構的定義。當您嘗試new的東西,已經耗盡內存

struct EthernetStructPointers 
{ 
    u_char DEST_ADDRESS[6]; 
    u_char SOURCE_ADDRESS[6]; 
    u_char TYPE[2]; 
}; 


struct EthernetStruct 
{ 
    u_char DEST_ADDRESS[6]; 
    u_char SOURCE_ADDRESS[6]; 
    u_char TYPE[2]; 

    u_char* dataPointer; 

    string DestAddress; 
    string SourceAddress; 
    string Type; 

    int length; 
}; 
+1

這兩行很好,這就是爲什麼他們在其他程序中工作。無論您的問題是什麼,您都已將其從帖子中刪除。我會建議製作最小可能的完整播放器併發布它。 – 2010-01-16 20:48:31

+0

我沒有看到你使用'new []'和'delete []'有什麼問題。難道這些運營商在全球被覆蓋幷包含一些不好的代碼? – stakx 2010-01-16 20:52:24

+0

我會嘗試發佈代碼,但它需要WinPCap可用。 – bobber205 2010-01-16 20:53:32

回答

2

我的猜測是freestore被以前的語句損壞(可能是由於pcap接口的錯誤使用),並且只有當管理器檢測到它並拋出時,您纔會瞭解下一次內存分配或釋放時發生的錯誤一個不好的分配。

+0

有一些答案。 將它們發佈在主帖子的編輯中。 – bobber205 2010-01-16 21:19:36

+0

解決了這個問題。:D 這是我試圖在循環中做一個內存拷貝,而不是使用memcpy。我很確定我做得對,但我猜不是。感謝大家的幫助! – bobber205 2010-01-16 21:30:02

0

std::bad_alloc應該被拋出。你能檢查你的程序有多少空閒內存?

+0

剛剛嘗試運行上面的幾次,它接收到兩次數據包數據,然後崩潰ALLOC。如何檢查有多少內存可用?我正在運行帶有4個RAM的Windows 7。 – bobber205 2010-01-16 20:48:54

+0

您可以打開任務管理器(Windows 7中是否還有一個?),添加儘可能多的基於內存的列並重新運行測試?如果任何內存價值飆升到鉅額,這可能是一個線索。 – 2010-01-16 20:59:28

+0

發佈產生問題的整個最小代碼示例。可能你已經損壞了堆或堆棧了一些與你所顯示的代碼無關的地方。 – nos 2010-01-16 21:19:35