realloc报堆错误
部分代码如下:
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。
输出窗口可能提供了更多诊断信息。
百式不得其解,只好求助
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。
输出窗口可能提供了更多诊断信息。
百式不得其解,只好求助
...全文
相关推荐
c语言中malloc、realloc与calloc 的区别以及联系
如果扩展成功且空间足够,realloc会在原地扩展内存;否则,它会在堆中寻找新的空间,将原有内容复制过去,并返回新指针。
浅谈malloc,calloc,realloc.pdf
为了避免潜在的错误,建议在释放内存后将指针设为`NULL`:```cint *p = (int*)malloc(sizeof(int));// 使用内存...free(p); // 释放内存p = NULL
C语言动态内存分配之malloc与realloc区别
"C语言动态内存分配涉及到malloc、realloc和calloc等函数,它们是程序在运行时动态管理内存的重要工具。动态内存分配允许程序员根据需要在堆上分配和释放内存,而不是在编译时预设固定大小。这
内存分配——realloc()函数的使用
在使用realloc()函数时,我们需要注意realloc()函数的返回值,以免造成程序崩溃或其他问题。例如,如果realloc()函数返回NULL,那么我们需要释放原来的内存空间,以免造成内存泄露。
realloc_test
**错误处理**:`realloc()`可能失败,例如,当系统没有足够连续的内存来满足新大小时。在这种情况下,`realloc()`会返回NULL,原有的内存区域仍然有效。


