powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Удаление обьекта
11 сообщений из 11, страница 1 из 1
Удаление обьекта
    #33594940
Eugene7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В оконной процедуре на сообщение WM_CREATE создаю обьект выделяя под него память из кучи:

Код: plaintext
Type *Object = new Type;

Мне надо освободить эту память при закрытии окна. Сначала ложу указатель в окно:

Код: plaintext
SetWindowLongPtr(hWnd, GWLP_USERDATA, (DWORD)Object);

Потом на сообщение WM_DESTROY мне надо уничтожить его:

Код: plaintext
1.
Type *Object = (Type *)GetWindowLongPtr(hWnd, GWLP_USERDATA);
delete Object;

Но на операторе delete программа вылетает с ошибкой. В чем может быть проблемма?
...
Рейтинг: 0 / 0
Удаление обьекта
    #33594979
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверь значение этого указателя после выделения памяти и перед сохранением. Проверь, что сделано это :

Reserve extra window memory by specifying a nonzero value in the cbWndExtra member of the WNDCLASSEX structure used with the RegisterClassEx function.
...
Рейтинг: 0 / 0
Удаление обьекта
    #33595019
Eugene7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значния до и после сходятся
...
Рейтинг: 0 / 0
Удаление обьекта
    #33595060
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если попробовать удалить объект сразу после создания. Может проблема в деструкторе объекта, а не в окне.
...
Рейтинг: 0 / 0
Удаление обьекта
    #33605295
Eugene7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже дело все же в деструкторе. Поставил delete сразу после создания обьекта( не пользуясь S(G)etWindowLongPtr() ), и код все равно умирает на delete. Но что может быть не так в деструкторе? У меня там нет никакого кода. Может дело в том что в классе есть члены-вектора — может их надо перед удалением памяти отдельно уничтожать(но они заводились не с помошью new)?
...
Рейтинг: 0 / 0
Удаление обьекта
    #33605450
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene7Похоже дело все же в деструкторе. Поставил delete сразу после создания обьекта( не пользуясь S(G)etWindowLongPtr() ), и код все равно умирает на delete. Но что может быть не так в деструкторе? У меня там нет никакого кода. Может дело в том что в классе есть члены-вектора — может их надо перед удалением памяти отдельно уничтожать(но они заводились не с помошью new)?
деструктор виртуальный?
...
Рейтинг: 0 / 0
Удаление обьекта
    #33605581
Eugene7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Ильич Eugene7Похоже дело все же в деструкторе. Поставил delete сразу после создания обьекта( не пользуясь S(G)etWindowLongPtr() ), и код все равно умирает на delete. Но что может быть не так в деструкторе? У меня там нет никакого кода. Может дело в том что в классе есть члены-вектора — может их надо перед удалением памяти отдельно уничтожать(но они заводились не с помошью new)?
деструктор виртуальный?

да
...
Рейтинг: 0 / 0
Удаление обьекта
    #33605588
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На Type и его конструктор бы посмотреть...
...
Рейтинг: 0 / 0
Удаление обьекта
    #33605890
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй передать delete не void*, а указатель на конкреный тип или на корень иерахии от которого он наследуется.
...
Рейтинг: 0 / 0
Удаление обьекта
    #33605893
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, не досмотрел код
...
Рейтинг: 0 / 0
Удаление обьекта
    #33605980
Eugene7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_БалтикаНа Type и его конструктор бы посмотреть...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
class LVGrid
{
friend LRESULT CALLBACK ListView_WndProc(HWND, UINT, WPARAM, LPARAM);
friend LRESULT CALLBACK ListViewParent_WndProc(HWND, UINT, WPARAM, LPARAM);

typedef vector < pair<unsigned short, pair<unsigned short, pair<bool, bool>         > > > EditIndexesColumns;
typedef pair<unsigned short, pair<unsigned short,pair<bool,bool> > > EditType;
typedef vector < EditType >::size_type size_type;
typedef vector < pair<unsigned short, vector<string> > > ComboIndexesColumns;
typedef pair<unsigned short, vector<string> > ComboType;
typedef vector < unsigned short > IndexesColumns;

public:
	LVGrid(void);
	virtual ~LVGrid(void);
   
	int GetLvHandle(void);

 	void SetLvHandle(HWND) THROW(exception);
	
	void SetLvParam( const IndexesColumns&, const IndexesColumns&, const IndexesColumns& );
	void SetLvParam( const IndexesColumns&, const IndexesColumns&, const ComboIndexesColumns& );
	void SetLvParam( const EditIndexesColumns&, const IndexesColumns&, const IndexesColumns&);
	void SetLvParam( const EditIndexesColumns&, const IndexesColumns&, const ComboIndexesColumns&);
	
private:
	HWND _hLV,  hLVParent;
	WNDPROC origLVWndProc, origLVParentWndProc;
	
	IndexesColumns CheckColumns;   
	EditIndexesColumns EditColumns;
 	ComboIndexesColumns ComboColumns;
	vector< pair<unsigned short, HWND> > ComboColHwnd;
	int Combo_CurentRow;
	unsigned short SelectedRow, SelectedCol; 
            ... /*еще куча inline функций*/
}

LVGrid::LVGrid()
{
    _hLV =  0 ;
    origLVWndProc =  0 ;
    SelectedRow = - 1 ; SelectedCol = - 1 ;
    Combo_CurentRow = - 1 ;
}
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Удаление обьекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]