【发布时间】: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->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