Я проверял свои коды с помощью valgrind, и он обнаружил утечку памяти. Я не понял, почему это произошло. Вместо того, чтобы помещать свой основной код, я создал аналогичную программу, чтобы проверить, не вызывают ли мои другие выделения (массив символов и т. Д. c) проблему или классы.
class zoo{
public:
int x;
zoo(int a){x = a;};
};
class doo:public zoo{
public:
int y;
doo(int a,int b):zoo(a){y = b;};
};
class foo : public doo{
public:
String z;
foo(int a, int b, const char *c):doo(a,b){
z = c;
};
};
zoo * something(const char * str){
return (zoo *) new foo(1,2,str);
}
int main() {
zoo * ex = something("blabla:sometext:blabla:overflow:message");
cout<<"msg:"<< ((foo*)ex)->z<<endl;
delete ex;
return 0;
}
Ничего сложного в коде. Существуют базовые классы, и я хочу получить указатель на последний класс в качестве указателя на первый базовый класс.
Когда я компилирую это valgrind показывает 4 выделяет 3 освобождения.
Что не так с этим кодом? Возможно, я неправильно понял концепцию наследования. Тем не менее, когда я вызываю функцию что-то как
something("blabla")
Ошибка не печатается.