c++ - Strange error reading file -
i'm compiling in mingw on windows , using gdb debug application. i'm getting output when trying read file disk:
processfile (type=35633, source=0xec4d6c "î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_î_"...) @ main.cpp:5
here read file function:
const char* read_file_contents(const char* filename) { string ret = ""; string line; ifstream ifs(filename); if (ifs.is_open()) { while (getline(ifs, line)){ ret += line + '\n'; } } else { std::cout << "failed open file: " << filename << std::endl; } return ret.c_str(); }
here main:
#include <iostream> #include "fileops.h" void test_func2(const char* test) { std::cout << strlen(test) << std::endl; std::cout << test << std::endl; } void test_func1(const char* test) { test_func2(test); } int main(int argc, char** argv) { test_func1(read_file_contents("test.txt")); return 0; }
can explain behavior? thanks!
this undefined behavior.
return ret.c_str();
the object ret
has local function scope. object gets destroyed when function returns, , of internal memory gets deallocated.
it's c_str()
method returns pointer that's no longer valid, after object gets destroyed. function returns, c_str()
pointer no longer valid.
the pointer that's returned c_str()
valid until std::string
object modified, or gets destroyed.
Comments
Post a Comment