У меня проблема с утечками памяти
У меня есть цикл, который читает данные на EXCEL с LibXL
библиотека.
Book* book3 = xlCreateXMLBook();
if (book3->load("Výmera Územia, využitie pôdy.xlsx")) {
CellType cellType;
Sheet* sheet = book3->getSheet(0);
while (startIndex <= 100 * countOfLoad) {
int k = 1;
int numberOfBlank = 0;
const char* name = sheet->readStr(startIndex, 0);
nameOfVillage = name;
free ((void*) name);
...
}
...
}
const char* name = sheet->readStr(startIndex, 0);
— Читает строку и ее формат из ячейки.
Память есть выделяется изнутри и действует до тех пор, пока не будет загружена новая книга или Book::release()
вызывается для двоичной реализации (xls).
Но необходимо каждый раз копировать строку результата в реализации xml (xlsx).
НО когда я пишу free ((void*) name)
Дай мне ошибку:
Test(24919,0x1025bb380) malloc: *** error for object 0x10dacb738: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug
Когда мой цикл идет после 158 время чтения строки, эта программа останавливает чтение, потому что память заполнена, я должен удалить память после чтения строки.
Кто-нибудь может помочь?
Спасибо
Из документации readStr
(http://libxl.com/spreadsheet.html#readStr)
Память распределяется внутри и действует до тех пор, пока не будет загружена новая книга или пока не будет вызвана Book :: release () для двоичной реализации (xls). Но необходимо каждый раз копировать строку результата в реализации xml (xlsx).
Что означает, что вам нужно позвонить Book::release()
когда вы закончите с книгой, чтобы освободить эту память.
Так что не звони free
на указатели вы получаете из этой библиотеки.
-Или сообщите об ошибке авторам LibXL.
-Или используйте больше памяти из freestore для ваших переменных.
Других решений пока нет …