2010-01-16 2 views
-1

Работа над проектом WinPCap. Попытка выполнить некоторые основные операции с указателем и памятью и иметь много ошибок.Ошибка четной памяти - Bad Alloc

Я включил две строки, которые я пытаюсь запустить вместе с включенными. Те же строки в другом проекте VSC++ работают нормально. Это ошибка, я получаю

Необработанное исключение в 0x75a79617 в pktdump_ex.exe: Microsoft 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; 

EDIT: Обнаружил что-то полезное. Следующий фрагмент кода - это то, что разрушает библиотеку winpcap.

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

Эти две линии прекрасны, поэтому они работают в других программах. Какова бы ни была ваша проблема, вы убрали ее из должности. Я бы предложил сделать наименьший возможный полный репродуктор и опубликовать его. –

+0

Я не вижу ничего плохого в использовании вами 'new []' и 'delete []'. Может быть, эти операторы переопределены во всем мире и содержат плохой код? – stakx

+0

Я постараюсь опубликовать код, но для этого потребуется наличие WinPCap. – bobber205

ответ

2

Моя догадка о том, что freestore поврежден одним из предыдущих утверждений (возможно, неправильным использованием интерфейса pcap), и вы узнаете об ошибке при следующем распределении или выпуске памяти, когда менеджер обнаруживает ее и бросает плохое распределение.

+0

Получите ответы. Опубликовано в редакции главного сообщения. – bobber205

+0

Решил проблему.: D Я пытался сделать копию памяти позже в цикле вместо использования memcpy. Я был уверен, что делаю это правильно, но, думаю, нет. Спасибо всем за помощь! – bobber205

0

std::bad_alloc должен быть выброшен при попытке new что-то и запустить из памяти. Можете ли вы проверить, сколько свободной памяти доступно для вашего процесса?

+0

Просто попробовал выполнить выше несколько раз. Он дважды получал пакетные данные, а затем разбился с плохим Alloc. Как проверить, сколько памяти доступно? Я запускаю Windows 7 с 4 гигабайтами оперативной памяти. – bobber205

+0

Можете ли вы открыть диспетчер задач (есть ли еще один в Windows 7?), Добавить столько столбцов на основе памяти, сколько сможете, и повторить запуск теста? Если какие-либо значения памяти скапливаются до огромных сумм, это может быть ключом. –

+0

Опубликовать весь минимальный образец кода, который создает проблему. Вероятно, вы повредили кучу или стек какое-то место, не связанное с кодом, который вы показали. – nos

Смежные вопросы