Я создал вектор объектов класса. Следующая программа вылетает сВектор объектов класса
"Pointer being freed was not allocated".
У меня также есть много копий. Я не вижу, где происходит двойное удаление. Что мне не хватает?.
#include <iostream>
#include <vector>
using namespace std;
enum MessageType { HEADER, DATA, CLOSE};
typedef class bufferElement{
public:
char *buffer ; //The actual data
int64_t length; //length of the data
MessageType messagetype;
/**
* Copy constructor for the structure
*/
bufferElement(const struct bufferElement &toCopy)
{
std::cout << "Copying the buffer vector - Copy Constructor for buffer" << std::endl;
buffer = new char[toCopy.length];
memcpy(buffer,toCopy.buffer,toCopy.length);
length = toCopy.length;
messagetype = toCopy.messagetype;
}
bufferElement()
{
buffer = NULL;
length =0;
messagetype = HEADER;
}
/**
* Initialises the vector element
* @param messagetype
* what type of message is the particular element.
* @param element
* The buffer element
* @param length_t
* The length/size of the buffer element
*/
bufferElement(char *element, int64_t length_t, MessageType messagetype_t) //constructor
{
std::cout << "The buffer element is Initialized" << std::endl;
buffer = new char[length_t];
messagetype = messagetype_t;
length = length_t;
memcpy(buffer, element, length_t);
}
~bufferElement()
{
std::cout << "Freeing the buffer in the vector - Destructor" << std::endl;
delete buffer;
buffer = NULL;
}
} messageHolder;
int main()
{
vector<messageHolder> v;
for(int64_t i=0; i< 1000000000000000000; i++)
{
int size = rand()%10000+5;
char *test = new char[size];
messageHolder m(test, size, HEADER);
v.push_back(m);
if(rand()%3)
{
v.erase(v.begin());
}
}
return 0;
}
У всех нас была эта фаза «изобретать колесо». Я думаю. По крайней мере, я тоже. – Dani
Ну, это урезанная версия более крупного кода, над которым я работаю. Я просто хотел воспроизвести ошибку с меньшим количеством строк. Для оригинала просто строка не работает для меня. – Naveen
@Naveen Да. –