Почему в этом коде дважды освобождается память?

Рейтинг: 0Ответов: 0Опубликовано: 25.05.2023
#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)

Ответы

Ответов пока нет.