[C++] Brak mozliwości zwolnienia pamięci właściwości w obiekcie
Ostatnio zmodyfikowano 2014-12-30 20:12
macsurf Temat założony przez niniejszego użytkownika |
[C++] Brak mozliwości zwolnienia pamięci właściwości w obiekcie » 2014-12-30 18:53:14 Witam Niestety mam problem ze zwolnieniem pamięci jednej z wlaściwosci ostatniego zwalnianego obiektu. Wszystkie obiekty są tego samego typu. Ale tylko ostatni z nich nie jest w stanie zwolnić pamięci dla właściwości p typu int. Dla tablicy char właściwości txt nie ma problemów tylko z tym intem :/ Po uruchomieniu programu mam taką informację: a.out(615) malloc: *** error for object 0x7fff67614b04: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug Abort trap: 6 Przykładowy kod: #include <iostream> #include <string.h>
using namespace std;
class MyTest { private: static int numobj; public: int x; int * p; char * txt; void print() { cout << "x: " << x << " p: " << p << " txt: " << txt << endl; } void setTxt( const char * cstr ); MyTest & operator =( const MyTest & o ); MyTest(); MyTest( const MyTest & o ); ~MyTest(); };
int main() { system( "clear" ); MyTest obj; MyTest obj2; MyTest obj3 = obj2; int num = 26; obj.x = 5; obj.p = & num; obj.setTxt( "moj tekscik !" ); obj2 = obj; obj3 = MyTest( obj ); obj.print(); obj2.print(); obj3.print(); return 0; }
int MyTest::numobj = 0;
MyTest::MyTest() { cout << "TWORZE OBIEKT !" << endl; cout << "Wywolany konstruktor domyslny klasy: " << typeid( this ).name() << endl; cout << "Obiekt utworzony pod adresem: " << this << endl; cout << "Licznik obiektu: " << ++numobj << endl << endl; x = 99; p = new int( 1 ); txt = new char[ 64 ]; }
MyTest::MyTest( const MyTest & o ) { cout << "Konstruktor kopiujacy !" << endl; cout << "Obiekt: " << this << endl; cout << "Licznik obiektu: " << ++numobj << endl << endl; x = o.x; p = new int( * o.p ); txt = new char[ 64 ]; setTxt( o.txt ); }
MyTest & MyTest::operator =( const MyTest & o ) { cout << "Operator przypisania !" << endl; cout << "Kopiowanie wlasciwosci - glebokie ! / Obiekt: " << this << endl << endl; if( this == & o ) return * this; delete p; delete[] txt; x = o.x; p = new int( * o.p ); txt = new char[ 64 ]; setTxt( o.txt ); return * this; }
void MyTest::setTxt( const char * cstr ) { strcpy( txt, cstr ); }
MyTest::~MyTest() { cout << "Destruktor obiektu: " << this << " Niszcze obiekt nr: " << numobj << endl << endl; --numobj; cout << "txt w destrktorze: " << txt << " | " << & txt << endl; cout << "p: " << * p << " | " << p << endl << endl; delete[] txt; delete p; }
|
|
DejaVu |
» 2014-12-30 19:52:08 Wywal tą linijkę lub zamień na: |
|
macsurf Temat założony przez niniejszego użytkownika |
» 2014-12-30 20:12:51 Dzięki, teraz jest ok :) Ehh takie błędy bywają irytujące a wręcz upokarzające :) Jak miałem zwolnić pamięć skoro przypisałem adres zmiennej ze stosu ehh nadpisując wcześniej przydzielony adres pamięci na stercie LOL :)
|
|
« 1 » |