Как освободить память после const char * malloc?

У меня проблема с утечками памяти

У меня есть цикл, который читает данные на 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 время чтения строки, эта программа останавливает чтение, потому что память заполнена, я должен удалить память после чтения строки.

Кто-нибудь может помочь?
Спасибо

-1

Решение

Из документации readStr (http://libxl.com/spreadsheet.html#readStr)

Память распределяется внутри и действует до тех пор, пока не будет загружена новая книга или пока не будет вызвана Book :: release () для двоичной реализации (xls). Но необходимо каждый раз копировать строку результата в реализации xml (xlsx).

Что означает, что вам нужно позвонить Book::release() когда вы закончите с книгой, чтобы освободить эту память.

Так что не звони free на указатели вы получаете из этой библиотеки.

-Или сообщите об ошибке авторам LibXL.

-Или используйте больше памяти из freestore для ваших переменных.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]