我从 Valgrind 收到此错误:
- ==31251== Memcheck,内存错误检测器
- ==31251== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
- ==31251== 使用 Valgrind-3.6.0 和 LibVEX;使用 -h 重新运行以获取版权信息
- ==31251== 命令:./a.out
- ==31251== 父 PID:31250
- ==31251==
- ==31251== 条件跳转或移动取决于未初始化的值
- ==31251== 在 0x400B9F: strcat2(char*, char*) (main.clean.cpp:30)
- ==31251== by 0x400C4E: main (main.clean.cpp:50)
- ==31251==
- ==31251==
- ==31251== 堆摘要:
- ==31251== 退出时使用:0 个块中的 0 个字节
- ==31251== 总堆使用量:2 次分配,2 次释放,分配 3,010 字节
- ==31251==
- ==31251== 所有堆块都被释放——不可能有泄漏
- ==31251==
- ==31251== 对于检测到和抑制的错误计数,重新运行:-v
- ==31251== 使用 --track-origins=yes 查看未初始化值的来源
- ==31251== 错误摘要:来自 1 个上下文的 3 个错误(抑制:6 个来自 6 个)
我看不出我的代码有什么问题...
#include <iostream>
using namespace std;
void strcat2(char* a, char* b);
int main()
{
char *a = new char[2010], *b = new char[1000];
while (cin.getline(a, 1000) && cin.getline(b, 1000))
{
cout << "a = \"" << a << "\";" << endl;
cout << "strcat2(a, \"" << b << "\");" << endl;
strcat2(a, b);
cout << "a = \"" << a << "\";" << endl << endl;
}
delete[] a;
a = NULL;
delete[] b;
b = NULL;
return 0;
}
void strcat2(char* a, char* b){
while (*a){
a++;
}
while((*a++ = *b++) != '\0'){
*a++ = *b++;
}
}