2012-05-15 3 views
-1

Здравствуйте, мне понадобится помощь при следующем утечке кода и памяти.Утечка памяти при выполнении функции над массивом

Журнал ошибок из этой программы показывает I`m encountring следующей утечки в моей программе:

Dr. Memory version 1.4.6 build 2 built on Mar 7 2012 10:14:04 
Application cmdline: ""D:\c++\Begin\L_6-8\Debug\L_6-8.exe"" 
Recorded 62 suppression(s) from default C:\Program Files (x86)\Dr. Memory/bin/suppress-default.txt 

Error #1: UNADDRESSABLE ACCESS: reading 0x0077f5a0-0x0077f5a4 4 byte(s) 
# 0 Assignment::getID()        [..//Assignment.h:26] 
# 1 AssignmentRepository::searchById()    [D:\c++\Begin\L_6-8\Debug/../AssignmentRepository.cpp:10] 
# 2 AssignmentRepository::delByID()     [D:\c++\Begin\L_6-8\Debug/../AssignmentRepository.cpp:30] 
# 3 Catalog::removeAssignment()      [D:\c++\Begin\L_6-8\Debug/../Catalog.cpp:38] 
# 4 _fu63___ZSt4cout         [D:\c++\Begin\L_6-8\Debug/../UIconsole.cpp:148] 
# 5 UIconsole::runUI()        [D:\c++\Begin\L_6-8\Debug/../UIconsole.cpp:24] 
# 6 Application::run()        [D:\c++\Begin\L_6-8\Debug/../App.cpp:48] 
# 7 main            [D:\c++\Begin\L_6-8\Debug/../App.cpp:25] 
Note: @0:00:21.491 in thread 6388 
Note: refers to 1 byte(s) beyond last valid byte in prior malloc 
Note: prev lower malloc: 0x0077f590-0x0077f5a0 
Note: instruction: mov (%eax) -> %eax 

Error #2: POSSIBLE LEAK 100 direct bytes 0x0077f5c8-0x0077f62c + 0 indirect bytes 
# 0 libstdc++-6.dll!_cxa_allocate_exception 
# 1 AssignmentRepository::delByID()    [D:\c++\Begin\L_6-8\Debug/../AssignmentRepository.cpp:36] 
# 2 Catalog::removeAssignment()     [D:\c++\Begin\L_6-8\Debug/../Catalog.cpp:38] 
# 3 _fu63___ZSt4cout        [D:\c++\Begin\L_6-8\Debug/../UIconsole.cpp:148] 
# 4 UIconsole::runUI()       [D:\c++\Begin\L_6-8\Debug/../UIconsole.cpp:24] 
# 5 Application::run()       [D:\c++\Begin\L_6-8\Debug/../App.cpp:48] 
# 6 main           [D:\c++\Begin\L_6-8\Debug/../App.cpp:25] 

DUPLICATE ERROR COUNTS: 

SUPPRESSIONS USED: 

ERRORS FOUND: 
     1 unique,  1 total unaddressable access(es) 
     0 unique,  0 total uninitialized access(es) 
     0 unique,  0 total invalid heap argument(s) 
     0 unique,  0 total warning(s) 
     0 unique,  0 total,  0 byte(s) of leak(s) 
     1 unique,  1 total, 100 byte(s) of possible leak(s) 
ERRORS IGNORED: 
    89 still-reachable allocation(s) 
     (re-run with "-show_reachable" for details) 
Details: C:\Users\Warzaru\AppData\Roaming/Dr. Memory/DrMemory-L_6-8.exe.9752.000/results.txt 

Учитывая мою функцию и Repository класса были ли я сделать что-то неправильно ...

Класс Header (полное):

#ifndef ASSIGNMENTREPOSITORY_H_ 
#define ASSIGNMENTREPOSITORY_H_ 

#include "Assignment.h" 
#include <vector> 

class AssignmentRepository{ 
private: 
    vector <Assignment> assignments; 
public: 
    vector <Assignment> getAll(); 
    void save(Assignment); 
    void delByID(int); 
    void editAssignment(Assignment); 
    int searchById(int); 
    void printAllAssignments(); 
    Assignment *getAssignment(int i); 

    ~AssignmentRepository(); 
}; 

#endif /* ASSIGNMENTREPOSITORY_H_ 

Класс СРР (часть):

int AssignmentRepository::searchById(int a){ 
for(unsigned i=0; i<assignments.size(); i++){ 
    if(a == assignments[i].getID()){ 
     return i; 
    } 
} 
return 0; 
} 

void AssignmentRepository::delByID(int i){ 
int check; 
check = searchById(i); 

if(check != 0){ 
    assignments.erase(assignments.begin()+check); 
} 
else{ 
    throw RepoException("ID does not exist in the database!"); 
} 
} 
+1

Вы не показан соответствующий код, так что невозможно сказать ... –

+0

Что еще должен показать вам: | –

+0

Посмотрите на вершину каждой трассировки стека ... –

ответ

1

Theres некоторое исключение в этой функции delByID() или это removeAssignment()

+0

, но почему, не мои ли функции правильные, разве они не будут работать? –

+0

Исключение указывает, что что-то пошло не так, когда вы пытались выделить что-то, хотя у вас есть исключение, программа может работать как ожидалось. Обязательно удаляйте() ваши назначения где-то, так как в вашем журнале указано: 89 недоступных для размещения мест (ы) – Joelmob

+0

спасибо .... нашел проблему, я не деконструировал один указатель в UIconsole. –

Смежные вопросы