我试图让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删除了
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。 OR
2)弄清楚分配和解除分配的情况,并使新/删除工作正常。
我已经编程了一段时间,但是这种内存管理的细微差别我以前从未遇到过。我知道我可能遗漏了一些关于我应该知道的新/删除的明显内容......
提前致谢