Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Usuwanie struktury?

Ostatnio zmodyfikowano 2012-07-30 14:19
Autor Wiadomość
SocrateZ
Temat założony przez niniejszego użytkownika
Usuwanie struktury?
» 2012-07-30 09:07:04
Jak w temacie - jak usunąć strukturę?

Biblioteka ALLEGRO usuwa je tak:
al_destroy_display( display )
A tworzy je tak:
ALLEGRO_DISPLAY *display = al_create_new_dispaly( );

Zrobiłem coś podobnego:

struct TEXT_LINE
{
char DATA[60];
bool INSERT;
unsigned short STARTX;
unsigned short STARTY;
unsigned short STOPX;
unsigned short STOPY;
unsigned char INDENT;
unsigned char POSITION;
unsigned char STARTPOS;
};

Wywołuję to:
TEXT_LINE *mapName = control.initTextLine( 50, 50, 200, 50, 15 );

Funkcja initTextLine:

TEXT_LINE* Controls::initTextLine( unsigned short posx, unsigned short posy, unsigned short width, unsigned short height, unsigned char indent )
{
static TEXT_LINE textline = { "", true, posx, posy, width - posx, height - posy, indent, 0, 0 };
return &textline;
}

Próbuje usunąć poprzez:
delete mapName;
Błąd aplikacji, po czym debuger wywala break, pokazując na tą linię

Próbuję usunąć poprzez:
free( mapName );
Brak błędu, debuger wywala break, pokazując na tą linię.

Proszę o pomoc, bo coś nie jarze tutaj :/

EDIT
==============================
Sprawdzałem też:

1. delete[] mapName;
2. delete mapName->DATA;
3. free( mapName->DATA );
No i kiszka :/
P-61404
m4tx
» 2012-07-30 09:36:44
delete
 i
free()
 możesz użyć tylko przy dynamicznym tworzeniu zmiennych, tj. przez
new
 lub
malloc()
. Poczytaj też o zasięgu życia zmiennych.
P-61406
SocrateZ
Temat założony przez niniejszego użytkownika
» 2012-07-30 09:48:14
Wiem co to zasięg życia zmiennych, po prostu przesiadam się z PHP na C++, trochę dziwne uczucie, ale jakoś sobie radzę...

Powracając do pytania...
To jak ja to mam usunąć?
P-61407
m4tx
» 2012-07-30 09:54:20
Musisz utworzyć zmienną za pomocą
new
, wtedy będziesz ją mógł również usunąć za pomocą
delete
. Tworząc zmienną wewnątrz bloku i potem zwracając wskaźnik do niej możesz spowodować wycieki pamięci.
P-61408
SocrateZ
Temat założony przez niniejszego użytkownika
» 2012-07-30 10:00:28
To nasunąłeś mi w poprzedniej odpowiedzi...

Tylko jak utworzyć taką strukturę?
Próbowałem:

static TEXT_LINE *textline = new TEXT_LINE;
textline->DATA = "";
textline->INDENT = indent;
textline->INSERT = true;
textline->STARTPOS = 0;
textline->POSITION = 0;
textline->STARTX = posx;
textline->STARTY = posy;
textline->STOPX = width + posx;
textline->STOPY = height + posy;
return textline;

I debuger zwraca błąd:
cannot convert from 'const char [1]' to 'char [60]'

PS: Jak tutaj można inaczej formatować kod, bo [code] nie jest zbyt ładne w tym przypadku

Ło matko... dobra, zbudowałem...
Ale twór mi wyszedł:

static TEXT_LINE *textline = new TEXT_LINE;
textline->DATA[60] = (unsigned char)"";
textline->INDENT = indent;
textline->INSERT = true;
textline->STARTPOS = 0;
textline->POSITION = 0;
textline->STARTX = posx;
textline->STARTY = posy;
textline->STOPX = width + posx;
textline->STOPY = height + posy;
return textline;

i usuwa normalnie :0
P-61409
m4tx
» 2012-07-30 10:20:29
I debuger zwraca błąd:
Kompilator, nie debugger.

PS: Jak tutaj można inaczej formatować kod, bo [code] nie jest zbyt ładne w tym przypadku
» Kurs STC » Kolorowanie składniKolorowanie składni języka C++ lekcja

(unsigned char)"";
Wpisz teraz więcej niż 1 znak w nawiasy i nie będzie działać :) Sprawdź
( char * )
P-61410
SocrateZ
Temat założony przez niniejszego użytkownika
» 2012-07-30 14:19:27
Dzięki :)
P-61432
« 1 »
  Strona 1 z 1