- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Valgrind 告诉我我的代码中有错误,但我找不到它...这是一个代码片段:
22 int main(int argc, char *argv[]){
...
//argv[1] contains the name of a file
int length=atoi(argv[2]);
map<string, double> Map;
char* Key;
Key = new char [length+1];
...
我还使用了 Key[length]='\0'
但这似乎不会影响其余代码。
现在我用从文件中获取的条目填充映射(其中包含键和值行的列表。键的维度总是小于长度。
while( file_stream >> Key >> Value){
Map[Key]=Value;
....
}
此时,我调用:
cout << Key << " has value ";
159 cout << Map[Key] << endl;
程序编译和执行都很好,但是 Valgrind 给出了很多这种类型的错误:
==6921== Conditional jump or move depends on uninitialised value(s)
==6921== at 0x56274A0: __printf_fp (printf_fp.c:404)
==6921== by 0x562396A: vfprintf (vfprintf.c:1622)
==6921== by 0x5648C81: vsnprintf (vsnprintf.c:120)
==6921== by 0x4EB64AE: ??? (in /usr/lib/libstdc++.so.6.0.13)
==6921== by 0x4EB9002: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_float<double>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, char, double) const (in /usr/lib/libstdc++.so.6.0.13)
==6921== by 0x4EB9328: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, double) const (in /usr/lib/libstdc++.so.6.0.13)
==6921== by 0x4ECCC9E: std::ostream& std::ostream::_M_insert<double>(double) (in /usr/lib/libstdc++.so.6.0.13)
==6921== by 0x40366E: main (MyProgram.cpp:159)
==6921== Uninitialised value was created by a stack allocation
==6921== at 0x401C61: main (MyProgram.cpp:22)
你有什么线索吗?我宁愿不发布所有长代码(请不要为此责备)
谢谢!!
最佳答案
堆栈跟踪表明您正在格式化一个double
。无法从 Map[Key]
中获取未初始化的 double
,除非您明确地将未初始化的 double
插入其中(即使是 >Key
不存在于 Map
中,将使用 double()
初始化。这可能指向 __printf_fp()
实现中的一段有趣代码:我将使用一个简单的测试程序验证该报告是否确实可以使用以下方法重现:
#include <iostream>
int main() {
std::cout << 3.14;
}
...如果是这样,我将忽略 valgrind
的报告。在一个非常平静的下午,可能需要深入研究 __printf_fp()
的实现,以找到它在哪里做了一些有问题的事情,并确定它是否真的重要(我不会赌我身上发生过的事情,虽然:我宁愿自己实现浮点格式化,但是,这可能需要一个下午以上的时间,因为它显然不重要)。
关于c++ - C++ std::map 中的 "Uninitialised value was created by a stack allocation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19201518/
所以我得到了这段代码,我应该将其放入我的代码中,该代码使用 getopt_long() 函数从命令行读取选项,并通过切换菜单传递它们。问题在于该函数,如果我不初始化 long_opts 的值,我会收到
现在,首先,我已经在该站点上阅读了其他答案,以及有关 jackson 序列化的其他答案,但是它们都提供了忽略null字段的方法。但是,在Java中,int不能是null。 我正在尝试将Java对象Ob
这个 valgrind 输出让我感到困惑,因为它似乎没有引用我的代码,而且我在使用 STL 编写的多个程序中都得到了它,尽管没有 HEAP SUMMARY 错误: $ valgrind -v --le
我写了一个小的 c 程序,它获取 3 个名称作为输入,然后将这三个值存储到一个节点。这三个值(名称)存储在数组 JOHNJAKEMATT 中,每个名称有 4 个字符。结果节点如下所示: /* poin
我正在写一个 linux 模块,这里是代码片段。它提示变量的统一化使用,但我想我已经检查过了在使用它之前有足够的检查。我认为这可能是相关的ERR_PTR 和 PTR_ERR 宏,但我不知道为什么。有人
我是 IOS 开发和处理内存泄漏的新手。在我的项目中,在分析项目时我遇到了一些内存泄漏。但是我无法在下面的代码中修复下面的逻辑错误。 CGRect labelframe; if ([questonmo
我分配一个二维数组并使用 memset 用零填充它。 #include #include #include void main() { int m=10; int n =10;
我有以下程序 http://ideone.com/1RPs8E .它使用可变参数函数 tlog 将在日志文件中打印一行。它接收打印行的级别、文件名、一行和调试信息的函数以及 printf 的格式和参数
我们正在尝试建立一个哈希表和一些用于设置、获取和删除表中值的过程。我们在第 35 行和第 53 行遇到“条件跳转或移动取决于未初始化的值”问题。 ==23720== Conditional jump
我正在尝试用 C 语言编写自己的 shell。下面的代码适用于没有管道的命令,但不适用于其他情况。 使用 --trace-children=yes 和 --track-origins=yes 运行 v
如何在 valgrind 的输出中抑制这个错误? ==16727== 1 errors in context 2 of 18: ==16727== Conditional jump or move d
我一直在使用 Valgrind 来查找我的代码中的内存泄漏,虽然没有发现内存泄漏,但报告了一些错误,所有这些错误都源于单个函数/类方法: ==17043== ERROR SUMMARY: 10100
该代码将编译并运行,并创建预期的输出,除非运行valgrind时才会出现这些内存泄漏。以下代码在Visual Studio上运行,不会出现任何警告或错误。 所以我的问题是,此内存泄漏发生在哪里?我是C
我正在为学校用 C 语言编写一个简约的 shell。它工作正常,但使用 Valgrind 我收到此错误,我无法弄清楚我做错了什么。我在程序开始时得到它: ==9396== Conditional ju
Valgrind 告诉我两个我无法解决的错误。我在以下函数 unplug_set 中收到“条件跳转或移动取决于未初始化的值”错误消息。是因为 NULL 检查吗?该函数应该从双链表中拔出元素。 void
这是我在第一节编程基础课后遇到的问题之一 gets() 工作正常(我认为),但“cin”拒绝工作 int main(void) { char *s1, *s2; puts("Enter
当我将我的项目与库的静态版本链接时,VALGRIND 开始报告错误编号“条件跳转或移动取决于未初始化的值”错误。问题是项目本身除了空的主函数外什么都没有,所以肯定是库的问题。 库的共享二进制文件和静态
我正在尝试编写一个将新结构添加到链表中的函数。无论我做什么,Valgrind 都会不断给我这个错误。这是代码: /* Stores a new address record to the linked
这是一些 Valgrind 日志的一部分: ==1652== Conditional jump or move depends on uninitialised value(s)==1652==
我在 valgrind 中遇到错误,不知道哪里出了问题。错误是:valgrind 输出: ==1112== Conditional jump or move depends on uninitiali
我是一名优秀的程序员,十分优秀!