调用 free 导致程序抛出异常

标签 c windows multithreading api free

当我偶然发现以下问题时,我正在做作业。我应该使用 C 和 Windows API 函数创建一个简单的多线程应用程序。每个线程都会运行一个简单的任务,所以我决定回收一些我做过的旧东西。

我有一个头文件:

http://pastebin.com/1aJFAwBg

还有一个源文件:

http://pastebin.com/L127FGhG

然后在 main 中,我进行以下调用:

LoadPoem();
ProcessPoem();
SavePoem();

LoadPoem 打开包含原始文件的文件,为输入分配一个缓冲区(变量 loadedPoemBuffer)并将文件中的文本存储在其中。 ProcessPoem 然后为更改后的版本(变量 processedPoemBuffer)分配一个缓冲区,并通过重复调用 strtok 来填充它。然后它释放 loadedPoemBuffer 并结束。 到目前为止,一切都很好。 当我调用 SavePoem() 时出现问题,它正确地保存了数据,但是当它结束时,它调用 free(processedPoemBuffer) 并抛出异常 - 损坏的堆。我似乎不明白为什么。在我看来,它执行的操作与之前的 ProcessPoem 完全相同,但该功能不会失败。

有人可以给我解释一下吗?提前致谢。

最佳答案

processedPoemBuffer 似乎是 LPWSTR,这意味着您的数据是 Unicode。然后你调用 _tcscat_s ,如果你正在为 Unicode 构建期望字符数,而不是字节数。您需要将输入文件大小除以 _tcscat_s 缓冲区长度参数的 WCHAR 大小。

关于调用 free 导致程序抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7717422/

相关文章:

c - 如何在 C 中的枚举中声明字符串

java - 挑剔的主机(锁?)

java - 推文分析: How to design

c - 回文程序

c++ - 为 ARM mbed 编译 PicoTCP 时未定义对 pico_dhcp_server_initiate 的引用

c++ - 打印指向 uchar 值的指针

c++ - 如何将一个 void 函数传递给另一个 void 函数?

windows - 将文件拖到 .exe 设置不同的工作目录

linux - ftp *.[cC][sS][vV] 在 Windows 上无法正常工作

c# - UI 在图像控件加载 BitmapImage 时卡住