0

我正在尝试让 xlslib 库 ( http://sourceforge.net/projects/xlslib/ ) 在我的 Windows MFC 程序 (VC 2010) 中工作。生成的 Excel 文件可能有点大,我需要能够在不关闭对话框的情况下编写多个 Excel 文件,这导致了一些问题。

根类称为“工作簿”。我最初声明:

workbook xls;

在处理 Excel 导出的函数中,但这会炸毁堆栈。xls 太大了。

下一次尝试我在对话框的类定义中声明了 m_xls,但我不知道如何在调用之间清除 m_xls,如果在打开对话框时多次运行 Excel 导出,则第一次运行的数据结束第二次,第三次运行从第一次和第二次获取数据,依此类推。

我尝试在导出功能结束时清除第一次运行的数据。我查看了在类的解构器中为从主数据存储向量中删除数据所做的工作。工作簿类非常复杂,有许多子类,无论我何时尝试程序在第一次运行 Excel 代码后(清除数据后)变得非常不稳定,当我退出时我在线程池函数中得到一个断言程序和输出窗口中的一些第一次机会异常。

最后,我在类中声明了一个工作簿指针,然后动态分配了一个工作簿:

m_pxls = new workbook;

在函数的开头。最后我用删除解除分配:

delete m_pxls;

这会使用以下错误消息炸毁程序:

HEAP[Program.exe]: Heap block at 06329360 modified at 0632950A past requested size of 1a2
Windows has triggered a breakpoint in Program.exe.

This may be due to a corruption of the heap, which indicates a bug in Program.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while Program.exe has focus.

The output window may have more diagnostic information.

看起来分配的所有内容都是其中没有数据的基本类,并且 xlslib 中的函数添加的所有数据都超出了分配的内存范围。也许我误解了一些东西,但是当内存被释放时,工作簿的解构器及其所有子类不会被调用吗?

我需要弄清楚如何在这里做两件事之一:

1)弄清楚如何在进一步调用Excel代码时重新初始化类定义中静态声明的m_xls。或者

2)弄清楚分配和释放发生了什么,并让新/删除正常工作。

我已经编程了一段时间,但这涉及到我以前从未遇到过的内存管理的细微差别。我知道我可能遗漏了一些我应该知道的关于新/删除的明显内容......

提前致谢

4

0 回答 0