Почему в этом коде дважды освобождается память?
#include <iostream>
#include <string>
using namespace std;
class A {
public:
int* data;
A() {
data = new int[1999]{ 0 };
cout << "HELLO" << endl;
}
~A() {
cout << "BYE" << endl;
if (data != nullptr) {
delete[] data;
data = nullptr;
}
}
};
A returnA(bool i) {
A a;
A b;
if(i){
return a;
} else {
return b;
}
}
int main() {
bool i = true;
A d = returnA(i);
return 0;
}
Program stdout: HELLO HELLO BYE BYE BYE
Program stderr: double free or corruption (!prev)
Источник: Stack Overflow на русском