Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Valgrind在strlen中检测到无效读取_C++_Memory_Valgrind - Fatal编程技术网

C++ Valgrind在strlen中检测到无效读取

C++ Valgrind在strlen中检测到无效读取,c++,memory,valgrind,C++,Memory,Valgrind,我正在使用Valgrind检测库中的内存泄漏/错误,这是我第一次使用它。这似乎表明std::string中存在一些无效读取 下面是错误消息的开头 ==16214== Invalid read of size 1 ==16214== at 0x402701D: strlen (mc_replace_strmem.c:282) ==16214== by 0x40E53AA: std::basic_string<char, std::char_traits<char>,

我正在使用Valgrind检测库中的内存泄漏/错误,这是我第一次使用它。这似乎表明
std::string
中存在一些无效读取

下面是错误消息的开头

==16214== Invalid read of size 1
==16214==    at 0x402701D: strlen (mc_replace_strmem.c:282)
==16214==    by 0x40E53AA: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==16214==    by 0x42FD03E: LHAPDF::Fortran_PDF_Base::initAlphasPDF() (Fortran_PDF_Base.C:290)
调用构造函数:

AlphaS_Info() {}
AlphaS_Info(bool fixed, Order order, std::string method, std::string symbol,
            double alfasQ, int alfasQParm, double Q0, double mc, double mb, double mt) :
  m_fixed(fixed), m_order(order), m_method(method), m_symbol(symbol),
  m_mc(mc), m_mb(mb), m_mt(mt), m_alfasQ(alfasQ), m_Q0(Q0), m_alfasQParm(alfasQParm) {}
p_info->p_asinfo = new LHAPDFTOOLS::AlphaS_Info(fixed, evoOrder, method, symbol, alfasQ, alfasQParm, Q0, cmass, bmass, tmass);

您可能将无效字符串传递到构造函数中,例如,使用指向已删除字符串的指针/引用。

我实际上不知道哪些代码是相关的。正如我所说,它“出现”的那一行是一个构造函数。但它是一个只填充结构的构造函数。我将把它放进去。这正是我所做的-我传递了一个const char*,它是我在早些时候使用std::string的c_str方法创建的。除了我使用的原始字符串已超出范围之外-因此指针无效!还要检查字符串是否以null结尾。许多C函数,如
fread
strncpy
都不会自动以null结束字符串。