realloc报堆错误

Martian158 2012-05-18 09:36:02
部分代码如下:
if (num >= sumLst) {
sumLst += 1000;
stateLst = (int *) realloc(stateLst, sizeof(int)*sumLst);
featId = (int *) realloc(featId, sizeof(int)*sumLst);
}
说明:主工程为a,依赖了库b.lib.int *变量stateLst、featId都是在工程a中定义的。
之前在a中用malloc为上述两变量申请了空间。先在在b.lib中的.c文件中用realloc重新申请空间。
执行stateLst = (int *) realloc(stateLst, sizeof(int)*sumLst);未报错。
单步F10执行featId = (int *) realloc(featId, sizeof(int)*sumLst);时,报错如下:
Windows 已在 a.exe 中触发一个断点。
其原因可能是堆被损坏,这说明 a.exe 中或它所加载的任何 DLL 中有 Bug。
原因也可能是用户在 a.exe 具有焦点时按下了 F12。
输出窗口可能提供了更多诊断信息。

百式不得其解,只好求助
...全文
188 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我看用vs2005创建了一个静态库工程,果然其默认的crt库是/Md(多线程Dll)的,如果和a.exe中不一致肯定会导致问题

你可以右击工程属性->配置属性->代码生成->运行时库,两个工程都设置为统一的/MDd(多线程调试DLL)吧
  • 打赏
  • 举报
回复
上面第二点是 可能会有不同的运行时库而导致问题(因为不同的运行时库中的全局变量肯定是不一致了)
  • 打赏
  • 举报
回复
1.b.lib应该是你的静态库?
2.两个工程使用的确定都是 /MDd模式? CRT库要一致。(不然会有不同动态库中的全局变量导致问题的。)
Martian158 2012-05-18
  • 打赏
  • 举报
回复
直接在b.lib里的.c文件中,用extern声明将stateLst、featId引入的
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
部分代码如下:
if (num >= sumLst) {
sumLst += 1000;
stateLst = (int *) realloc(stateLst, sizeof(int)*sumLst);
featId = (int *) realloc(featId, sizeof(int)*sumLst);
}
说明:主工程为a,依赖了库b.lib.int *变量stateLst……
[/Quote]

问下楼主的代码 是在b.lib中的吗?
还有你a工程依赖b.lib,那么你的stateLst、featId参数是如何传递给b.lib的呢?
Martian158 2012-05-18
  • 打赏
  • 举报
回复
自己顶一下先!求助啊!急急急!!!

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧