View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000408 | Far Manager | _Common | public | 2007-12-04 03:09 | 2007-12-18 03:05 |
Reporter | vsergiy | Assigned To | vskirdin | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Fixed in Version | 1.80 alpha 1 | ||||
Summary | 0000408: Memory leak in struct MacroState | ||||
Description | struct MacroState doesn’t have a destructor, so memory leak caused by TVarTable *locVarTable struct member. | ||||
Tags | No tags attached. | ||||
Build | 390 | ||||
|
А он там нужен? Эта запись по наитию заведена (т.е. без применения тех.средст)? KeyMacro::~KeyMacro() { InitInternalVars(); } void KeyMacro::InitInternalVars(BOOL InitedRAM) { ... if(InitedRAM) { ReleaseWORKBuffer(TRUE); ... } void KeyMacro::ReleaseWORKBuffer(BOOL All) { if(Work.MacroWORK) { ... if(Work.AllocVarTable) >>> deleteVTable(*Work.locVarTable); Work.MacroWORK=NULL; ... } void deleteVTable(TVarTable table) { for ( int i = 0 ; i < V_TABLE_SIZE ; i++ ) ... delete table[i]; ... } |
|
Элементы из таблицы удаляются, но память выделенная для таблицы (23 указателя) не освобождается. |
|
ок |
|
Валя, глянь на это, я что то не пойму когда эту фигню можно освобождать. |
|
Мы тут с DrKnS уже разобрались. |
|
387 |
|
Нужно еще добавить освобождение памяти в деструкторе ~KeyMacro(). Index: macro.cpp =================================================================== --- macro.cpp (revision 1386) +++ macro.cpp (working copy) @@ -310,6 +310,13 @@ KeyMacro::~KeyMacro() { InitInternalVars(); + + if (Work.AllocVarTable) + { + xf_free(Work.locVarTable); + Work.locVarTable=NULL; + Work.AllocVarTable=false; + } } void KeyMacro::InitInternalLIBVars() |
|
Так там же в InitInternalVars вызывается ReleaseWORKBuffer который это и делает. |
|
KeyMacro::ReleaseWORKBuffer() освобождает память только если работает условие: if(Work.MacroWORK) { ... } |
|
тыкс... перебор вышел с Work.locVarTable :-( Сам "Work.locVarTable" нужно удалять только в деструкторе. В остальных случаях - только содержимое таблицы. Сам сделаю. |
|
see 390 |
Date Modified | Username | Field | Change |
---|---|---|---|
2007-12-04 03:09 | vsergiy | New Issue | |
2007-12-04 04:01 | vskirdin | Note Added: 0000946 | |
2007-12-04 04:33 | vsergiy | Note Added: 0000947 | |
2007-12-04 04:58 | vskirdin | Note Added: 0000948 | |
2007-12-04 12:34 | alexy | Status | new => assigned |
2007-12-04 12:34 | alexy | Assigned To | => alexy |
2007-12-07 07:38 | alexy | Assigned To | alexy => vskirdin |
2007-12-07 07:39 | alexy | Note Added: 0000968 | |
2007-12-07 07:50 | alexy | Assigned To | vskirdin => alexy |
2007-12-07 07:50 | alexy | Note Added: 0000970 | |
2007-12-08 09:05 | alexy | Build | => 387 |
2007-12-08 09:05 | alexy | Status | assigned => closed |
2007-12-08 09:05 | alexy | Note Added: 0000972 | |
2007-12-08 09:05 | alexy | Resolution | open => fixed |
2007-12-08 09:05 | alexy | Fixed in Version | => 1.80 alpha 1 |
2007-12-10 02:48 | vsergiy | Note Added: 0000983 | |
2007-12-10 02:48 | vsergiy | Status | closed => assigned |
2007-12-10 02:48 | vsergiy | Resolution | fixed => reopened |
2007-12-10 09:38 | alexy | Note Added: 0000989 | |
2007-12-10 09:38 | alexy | Status | assigned => feedback |
2007-12-10 15:39 | vsergiy | Note Added: 0000995 | |
2007-12-12 14:01 | vskirdin | Note Added: 0001018 | |
2007-12-12 14:01 | vskirdin | Assigned To | alexy => vskirdin |
2007-12-12 14:01 | vskirdin | Status | feedback => assigned |
2007-12-14 04:12 | vskirdin | Note Added: 0001038 | |
2007-12-14 04:12 | vskirdin | Status | assigned => feedback |
2007-12-14 20:58 | vsergiy | Status | feedback => resolved |
2007-12-14 20:58 | vsergiy | Resolution | reopened => fixed |
2007-12-18 03:05 | vskirdin | Build | 387 => 390 |
2007-12-18 03:05 | vskirdin | Status | resolved => closed |