如何修复C ++中的"堆已损坏"错误?
How to fix 'Heap has been corrupted 'error in c++?
当我运行程序时,在函数完成后出现异常"堆已损坏">
我已经读到,如果您正在使用已释放的内存,或者当您写入数组索引外的索引时,可能会导致此异常。但这些情况都不适用于这里。我已经阅读了一些问题的其他答案,但没有多大帮助。
`char fileNametoExport[26]="d:\FOlder1\part1.ipt";
char WorkingFolderName[260] ="d:\folder";
int start = rFind(fileNametoExport, '');
int finish = rFind(fileNametoExport, '.');
if (start == -1)
start = 0;
char partname[260];
strcpy(partname,substr(fileNametoExport, start, finish));
::AfxMessageBox((LPCTSTR)partname);
char xtfile[260];
char xmltxtfile[260];
strcpy(xtfile, strcat(WorkingFolderName, partname));
strcat(xtfile, "__Default.x_t");
strcpy(xmltxtfile, WorkingFolderName);
strcat(xmltxtfile,"_XT_SE_INV_Default_SOLID_0_Solid1_xt.xmt_txt");`
函数 rfind(( 查找字符数组中字符的出现-
int rFind(char* s, char c)
{
int sz = 0;
char *tmp = s;
while (*tmp != ' ')
{
sz++;
tmp++;
}
for (int i = sz - 1; i >= 0; i--)
{
if (*(s + i) == c)
return i;
}
return -1;
}
函数 substr(( 获取从位置 x 到 y 的子字符串(Y 排除(
char* substr(char* s, const int b, const int f)
{
char *str = new char[f - b];
int t = 0;
for (int i = b; i != f; i++)
{
str[t] = s[i];
t++;
}
str[t] = ' ';
return str;
}
附言-在提供输入时,我确保文件名导出始终包含"."和"\"。
- 程序不检查输入字符串的长度。您可以接收比缓冲区更长的字符串,程序将失败。
- 如果您的程序
fileNametoExport = "d:\somefolder\somefilewithoutdot"
,finish
将为 -1,程序在strcpy(partname,substr(fileNametoExport, start, finish));
时失败。 -
程序在缓冲区后写入
char* substr(char* s, const int b, const int f)
行str[t] = ' ';
因为此时
t
等于f-b
,str
缓冲区的大小。
<crtdbg.h>
的功能_ASSERTE( _CrtCheckMemory( ) );
在搜索此类错误时非常有用。把它放在可疑代码周围,它会在你的错误之后失败。它仅适用于调试。
相关文章:
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 为什么C中的通用链表中存储的数据已损坏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 在为 iOS 构建 aws-sdk-cpp 时,cmake 上的 CXX 编译器错误已损坏
- 如何修复C ++中的"堆已损坏"错误?
- 运行时检查失败#2 - 变量周围的堆栈'myArray'已损坏.- 似乎无法弄清楚如何删除此错误
- c++运行程序时出现堆已损坏错误
- 错误:运行时检查失败 #2 - 变量周围的堆栈已损坏
- 解决错误的一般方法:变量周围的堆栈'x'已损坏
- 如何更正运行时错误变量周围的堆栈已损坏
- 此代码生成错误的原因:堆已损坏
- 变量周围的调试错误堆栈已损坏
- 错误:运行时检查失败 #2 - 变量周围的堆栈'file'已损坏
- 堆栈周围变量已损坏错误
- 运行时错误-变量arr_processes周围的堆栈已损坏
- 快速排序错误:变量周围的堆栈已损坏
- 运行时错误 - C++ 运行时检查失败 #2 - 变量"theArray"周围的堆栈已损坏
- 视觉基本C++错误。运行时检查失败 #2 - 变量周围的堆栈'matrix'已损坏