Добрый день. Подскажите, пожалуйста, в чем может быть ошибка. В конце срабатывают 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;
}
Вы передаете 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;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
ЗдравствуйтеИспользую V8 для реализации скриптования в программе
Можно ли создать несколько переменных и при помощи функции rand() из этих переменных выбрать случайным образом одну?
Мне нужно создать стек-структуруДанные структуры должны быть private или protected
example: decimal nonation, binary system, octal nonation