我怎样在const char * malloc之后释放内存?

时间:2018-05-07 06:41:41

标签: c++ xcode memory memory-leaks libxl

我遇到内存泄漏问题

我有循环,用LibXL库读取EXCEL上的数据。

    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 时间读取字符串后,此程序停止读取导致内存已满,我必须在读取字符串后删除内存。

任何人都可以提供帮助? THX

2 个答案:

答案 0 :(得分:0)

来自readStrhttp://libxl.com/spreadsheet.html#readStr

的文档
  

内存分配内存有效,直到加载新工作簿或调用Book :: release()进行二进制实现(xls)。但是每次在xml实现中都需要复制结果字符串(xlsx)。

这意味着当您完成工作簿以释放内存时,需要调用Book::release()

因此,请勿通过此库中的指针调用free

- 或者向LibXL的作者提交一个错误。

- 或 - 从freestore为变量使用更多内存。

答案 1 :(得分:-1)

我遇到了同样的问题。 这可能不是内存泄漏的问题.. 购买许可证即可解决问题。