C++ 奇数内存错误--错误的Alloc

C++ 奇数内存错误--错误的Alloc,c++,memory,pointers,C++,Memory,Pointers,正在处理WinPCap项目。尝试执行一些基本的指针和内存操作时,会出现很多错误 我已经包括了两行内容,我正试着按照这些内容运行。 在另一个VSC++项目中,同样的行工作得很好。这就是我得到的错误 中0x75a79617处的未处理异常 PKTUMPPXEXEX:微软C++ 异常:std::内存中的错误分配 位置0x0012f8e4 这些是结构的定义 struct EthernetStructPointers { u_char DEST_ADDRESS[6]; u_char SOUR

正在处理WinPCap项目。尝试执行一些基本的指针和内存操作时,会出现很多错误

我已经包括了两行内容,我正试着按照这些内容运行。 在另一个VSC++项目中,同样的行工作得很好。这就是我得到的错误

中0x75a79617处的未处理异常 PKTUMPPXEXEX:微软C++ 异常:std::内存中的错误分配 位置0x0012f8e4

这些是结构的定义

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;
};

当您尝试
new
某些内容并且内存不足时,应该抛出
std::bad_alloc
。你能检查一下你的进程有多少可用内存吗?

我猜freestore被前面的一条语句损坏了(可能是因为pcap接口使用不当),你只能在下一次内存分配或释放时,当管理器检测到错误并抛出一个错误的alloc时,才知道错误。

这两行都很好,这就是他们在其他项目中工作的原因。不管你的问题是什么,你已经把它从帖子中删掉了。我建议制作尽可能小的完整的复制器并发布它。我会尝试发布代码,但是它需要WiPCAP可用。既然你有MSVC,你是否配置了调试器来打破被抛出的C++异常,并验证上面的代码是原因吗?没有这些行,我就不会出错。有了我,我很确定他们是原因。如果我在它们上设置断点并尝试跳过它,我就得到了错误。附加调试器,转到调试>异常,然后单击C++异常的复选框。顺便说一句,当您在调试器中被停止时,您可以打开任务管理器,查看您的进程的内存消耗情况。它两次收到数据包,然后由于错误的alloc而崩溃。如何检查有多少内存可用?我运行的是内存为4 Gig的Windows 7。能否打开任务管理器(Windows 7中还有任务管理器吗?),添加尽可能多的基于内存的列,然后重新运行测试?如果任何内存值急剧增加,这可能是一个线索。发布一个产生问题的完整的最小代码示例。可能是您在与所显示代码无关的位置损坏了堆或堆栈。已解决问题:是我后来在循环中尝试自己复制内存,而不是使用memcpy。我很确定我做得对,但我想不是。谢谢大家的帮助!
EthernetStructPointers* testData;
testData = (EthernetStructPointers*)pkt_data;

EthernetStruct newData;
memcpy(newData.DEST_ADDRESS, testData->DEST_ADDRESS, 6);
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;
};