我从Valgrind收到此错误:
== 31251 == Memcheck,内存错误检测器
== 31251 ==朱利安·塞沃德(Julian Seward)等人版权所有(C)2002-2010和GNU GPL。
== 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 ==通过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++;
}
}
最佳答案
是的@Adri C.S.在说:
while((*a++ = *b++) != '\0') {
*a++ = *b++;
}
做了:
while((*a++ = *b++) != '\0');
注意:答案由@Adri C.S提供
关于c++ - Valgrind错误-条件跳转或移动取决于未初始化的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19816795/