Сбой при удалении объекта, выделенного динамически в другой функции

Я написал простую программу:

#include<iostream>
#include<list>
using namespace std;
list<int>& func();

int main(){
list<int> a = func();
delete &a;
std::cout<<"Here\n";
}

list<int>& func(){
list<int>* ptr = new list<int>;
return *ptr;
}

Эта программа никогда не печатает Here к потоку cout ….

Это просто вылетает ..

Я не могу найти причину ..

-1

Решение

Я предполагаю, что вы имеете в виду:

list<int> a = func();

потому что в противном случае он даже не скомпилируется. В любом случае переменная a никогда не выделялся new, Это копия переменной, на которую указывает возврат func,

Хотя вы возвращаете ссылку, вы копируете ее, потому что a сам по себе не является ссылкой. Следующее будет работать:

list<int>& a = func();
delete &a;

Сбои: http://ideone.com/T3Iew

Работает: http://ideone.com/ONVKU

Во всяком случае, я надеюсь, что это для образовательных целей (что здорово, потому что вы понимаете угловые случаи), но для производственного кода это было бы очень очень неправильно.

6

Другие решения

Потому что вы объявлены как указатель, а не как ссылка. + Изменить list<int>* a в list<int> & a,

Но, пожалуйста, НИКОГДА не пытайтесь делать подобные вещи в рабочем коде.

1

По вопросам рекламы [email protected]