Добрый день. Прошу помощи. Сейчас изучаю наследование классов C++, и написал небольшой код по этому делу, но программа падает на этапе работы деструктора с ошибкой "Expression: _CrtIsValidHeapPointer(block)". Пишу в Visual Studio 2015. Если не передавать экземпляр класса А в экземпляр класса В, ошибки не возникает.
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class A {
protected:
char *M;
char *Z;
public:
A()
{
M = nullptr;
Z = nullptr;
}
A(char *z)
{
Z = new char[strlen(z) + 1];
strcpy_s(Z, strlen(z) + 1, z);
}
char* get_Z()
{
return Z;
}
~A()
{
cout << "Destruct" << endl;
delete[]M;
delete[]Z;
}
};
class B : public A
{
public:
B() :A()
{
}
B(A &aA)
{
Z = aA.get_Z();
}
void show()
{
cout << "Z2: " << Z << endl;
}
};
void main() {
A as("qwerty");
cout << as.get_Z() << endl;
B cv(as);
cv.show();
}
В
B(A &aA)
{
Z = aA.get_Z();
}
вы присваиваете полю Z
значение, которое оно имеет в aA
(as
в main
). Затем освобождаете его как в деструкторе as
, так и в деструкторе cv
.
Два раза одну память освобождать нельзя...
Еще в конструкторе
A::A(char *z)
вы не присваиваете значение M
, и оно указывает не пойми куда. В деструкторе вы освобождаете это не пойми что, что тоже делать никак нельзя.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Когда я использую QPixmap::GrabWindow(WId) на окне с веб браузером (например, Chrome), он возвращает мне просто черный экранИспользую следующий код:
Здравствуйте! Необходимо чтобы часть оперативной памяти определялась как жесткий дискЗнаю о существовании такой утилиты как Dataram RAMDisk, но хотелось...
Я сделал небольшую игру крестики-нолики, для ИИ использован минимакс алгоритмНо определенными комбинациями его легко обыграть
Всем доброй ночиВсе-таки не успокоюсь, пока не решу окончательно одну проблему