shared_ptr и ошибка _crtisvalidheappointer(block)

276
08 ноября 2017, 02:32

Добрый день. Подскажите, пожалуйста, в чем может быть ошибка. В конце срабатывают 2 деструктора и вылетает ошибка: _crtisvalidheappointer(block). Заранее спасибо.

class Call
{
public:
    int _id;
    string _name;
    Call()
    {
    }
    Call(int id, string name): _id(id), _name(name)
    {
    }
    ~Call()
    {
        printf("destructor\n");
    }
    void Print()
    {
        printf("id : %d \n", _id);
    }
};
int main()
{
   std::vector <shared_ptr<Call> > m_vCalls;
    Call emptyCall;

    shared_ptr<Call> emptyCallPtr(& emptyCall);
    m_vCalls.push_back(emptyCallPtr);
    m_vCalls[0]->Print();
    Call FirstCall(1, "First");
    shared_ptr<Call> FirstCallPtr(& FirstCall);
    m_vCalls[0] = FirstCallPtr;
    m_vCalls[0]->Print();
    m_vCalls[0]->_id = 2;
    m_vCalls[0]->Print();
    FirstCall.Print();

    return 0;
}
Answer 1

Вы передаете shared_ptr адрес локальной переменной, а не выделенной с помощью new - а потом shared_ptr пытается его удалить. А удалять то, что не выделено при помощи new, нельзя.

Попробуйте так:

int main()
{
   std::vector <shared_ptr<Call> > m_vCalls;
    Call * emptyCall = new Call;

    shared_ptr<Call> emptyCallPtr(emptyCall);
    m_vCalls.push_back(emptyCallPtr);
    m_vCalls[0]->Print();
    Call *FirstCall = new Call(1, "First");
    shared_ptr<Call> FirstCallPtr(FirstCall);
    m_vCalls[0] = FirstCallPtr;
    m_vCalls[0]->Print();
    m_vCalls[0]->_id = 2;
    m_vCalls[0]->Print();
    FirstCall->Print();

    return 0;
}
READ ALSO
Вызов callback функции из C++ (V8)

Вызов callback функции из C++ (V8)

ЗдравствуйтеИспользую V8 для реализации скриптования в программе

196
rand() для переменных

rand() для переменных

Можно ли создать несколько переменных и при помощи функции rand() из этих переменных выбрать случайным образом одну?

260
C++ - Приватная структура - стек

C++ - Приватная структура - стек

Мне нужно создать стек-структуруДанные структуры должны быть private или protected

271