我需要使用一个std::string来存储检索到的数据fgets().要做到这一点,我需要将转换char*返回值从fgets()到std::string阵列中的存储.如何才能做到这一点?
Valgrind在为字符串赋值时报告内存泄漏.
我使用以下简单代码来测试Valgrind报告的内存泄漏.
/******************************************
* FILE: t3.c
* Compiled using : g++ -g t3.c -o t3
*
* $ g++ -v
* Reading specs from /usr/lib/gcc/i686-pc-linux-gnu/3.4.6/specs
* Configured with: ./configure --prefix=/usr --infodir=/share/info --mandir=/share/man
* --enable-languages=c,c++ --with-system-zlib --program-suffix=-3.4 --enable-threads=posix
* Thread model: posix
* gcc version 3.4.6
******************************************/
#include <iostream>
#include <string>
using namespace std;
/**************************************************************
**************************************************************/
int main(int argc, char *argv[])
{
string test = "XXXXXXXXX";
cout << "this is a test " << test << endl;
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
我使用这个命令编译:
$ …Run Code Online (Sandbox Code Playgroud) 我是valgrind的新手,所以这可能会错过解释输出.Valgrind似乎认为字节在以下几行中丢失:
if ( mysqlpp::StoreQueryResult result = query.store() ){
for ( size_t i = 0; i < result.num_rows(); ++i ){
hash = std::string( result[i]["hash"].data(), result[i]["hash"].length() );
label = std::string( result[i]["label"].data(), result[i]["label"].length() );
keywords = std::string( result[i]["keywords"].data(), result[i]["keywords"].length() );
task_raw = std::string( result[i]["task"].data(), result[i]["task"].length() );
solution_raw = std::string( result[i]["solution"].data(), result[i]["solution"].length() );
Run Code Online (Sandbox Code Playgroud)
事实上,每当有一个std :: string以这种方式构建时,它就会抱怨^^.如果我正在复制的方式不正确,或者结果是以某种方式泄露,我无法弄清楚这是否是误报.
有趣的是,它抱怨另一段不使用mysql ++的代码,但同样使用了一个字符串构造函数:
for ( auto & f : frames ){
for ( unsigned int i = 0; i < f.getTask().size(); i++ ){
if ( i + 1 < …Run Code Online (Sandbox Code Playgroud)