-1

我有内存泄漏问题

我有一个循环,它用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次读取字符串后,该程序停止读取导致内存已满,我必须在读取字符串后删除一些内存。

任何人都可以帮忙吗?谢谢

4

2 回答 2

0

来自readStrhttp://libxl.com/spreadsheet.html#readStr)的文档

内存在内部分配并且在加载新工作簿或为二进制实现 (xls) 调用 Book::release() 之前有效。但是每次在 xml 实现(xlsx)中都需要复制一个结果字符串。

这意味着您需要Book::release()在完成工作簿后调用以释放此内存。

所以不要调用free你从这个库收到的指针。

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

- 或 - 为您的变量使用更多内存。

于 2018-05-07T07:26:21.663 回答
-1

我有同样的问题。这可能不是内存泄漏的问题..问题将通过购买许可证来解决。

于 2021-01-22T03:14:59.917 回答