解释valgrind错误
Interpreting valgrind error
我正在尝试使用valgrind调试我的代码。我收到的大部分信息是:
Conditional jump or move depends on uninitialised value(s)
或
Invalid read of size 8
我主要关心的是第一个问题,如果值真的没有初始化,我相信会出现分段错误。我通过向另一个函数发送相同的指针,同时向我知道会引发分段错误的函数发送未初始化的指针来测试这一点,只有真正未初始化的指示器才会导致分段错误。
这个错误消息的含义可能也是什么。
另外,第二个错误是什么意思?
第1版
这是一个模型代码,会给出错误1吗(假设头文件是合法的(?
a.cp
B b;
C c;
int main(){
return 0;
}
B.cpp
extern C c;
// double t; //canceld, declared in the header.
B::B(){
this->t = 1;
c.test(t);
}
B::test(){
c.test(this->t);
}
B.cpp
C::C(){
}
C::test(double t){
printf("%fn",t);
}
Conditional jump or move depends on uninitialised value(s)
这意味着您正试图对未初始化的变量执行某些操作。例如:
int main()
{
int x;
if (x == 5)
printf("%dn", x);
return 0;
}
应该做到这一点。无法对未初始化的变量进行比较/打印或执行某些操作。
Invalid read of size 8
这意味着您正在尝试从不存在的内存中读取,即尚未分配的内存。
int main()
{
char* x = malloc(10);
x[10] = '@'; //this is an invalid write
printf("%cn", x[10]); //this is an invalid read
return 0;
}
会导致错误,因为您只为10个字符分配了空间,但您正在第11个字符处写入/读取(请记住,数组是0索引的,因此只能写入0-9(。
"大小X"通常是你试图读取的内存量,所以大小8意味着你试图读取8个字节。
希望能有所帮助。如果需要调试帮助,请发布更具体的代码。Valgrind通常会告诉错误发生的位置,这样您就可以知道该怎么做了。
相关文章:
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- 重载 new 和 delete 会导致 valgrind 错误
- 使用valgrind跟踪段错误,并了解valgrind输出
- 我如何理解我的Valgrind错误消息
- STD :: FPCLASSIFY的错误结果使用Valgrind进行长时间的双重双重结果
- Valgrind 错误和内存泄漏与 Python/C API
- 将TopoDS_Face对象分配给其子对象编译没有错误,但我有 3 个 valgrind 错误
- Opencl ClgetPlatFormids给出了约230个Valgrind Memcheck错误
- 为什么我会因Valgrind遇到内存错误?(C ,抽象语法树评估)
- valgrind错误无效读数4
- Valgrind 检查简单多线程 C++11 得到 SIG11 错误
- Valgrind 显示无效的读/写错误,但我不使用 new 或 calloc,只使用向量和固定数组
- C++ mac OS X El Capitan上的openmp,Valgrind错误(数据竞赛)
- Valgrind 错误:系统调用参数 epoll_pwait(sigmask) 指向不可寻址的字节
- Valgrind中的一些错误
- 使用 valgrind 时获得 int 变量指针的无效读取大小错误
- 使用 valgrind 的地图中的读取大小错误无效
- Valgrind内存泄漏和错误
- Valgrind 在构建时出现由 G++5 内联的错误 - Valgrind 或 G++5 中的错误
- 双重免费或腐败错误- valgrind