【问题标题】:How i free memory after const char* malloc?我如何在 const char* malloc 之后释放内存?
【发布时间】:2018-10-16 22:02:20
【问题描述】:

我有内存泄漏问题

我有一个循环,它使用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-&gt;readStr(startIndex, 0); - 从单元格中读取字符串及其格式。

内存在内部分配并且在加载新工作簿或为二进制实现 (xls) 调用 Book::release() 之前有效。

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

有人可以帮忙吗? 谢了

【问题讨论】:

  • 你没有释放内存,它不是给你的,你使用指针复制字符串。
  • "如何在 const char* malloc 之后释放内存?" 所示代码中的 malloc 在哪里?如果你不知道它是用malloc分配的,你为什么要用free删除它?
  • 貌似没有办法释放内存,找个更好的excel库
  • 这是方法 readStr 的定义:'const wchar_t* readStr(int row, int col, Format** format = 0)' 从单元格中读取字符串及其格式。内存在内部分配并且在加载新工作簿或为二进制实现 (xls) 调用 Book::release() 之前有效。但是每次在 xml 实现(xlsx)中都需要复制一个结果字符串。如果指定的单元格不包含字符串或发生错误,则返回 NULL。使用 Book::errorMessage() 获取错误信息。这必须分配内存,当我在 exel 中逐行读取时,在 158 次之后停止我读取任何行:(
  • 可能内存已经被其他代码用完了。

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


【解决方案1】:

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

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

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

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

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

-或者- 为您的变量从 freestore 中使用更多内存。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 欢迎来到stackoverflow。请尝试在此处发布更清晰的答案,例如通过指定此处问题不是内存泄漏的原因。你的回答更像是一个评论而不是一个正确的答案(我知道你还不能评论,但仍然)。
    猜你喜欢
    • 1970-01-01
    • 2017-06-11
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多