There must be something obvious I don’t realize about C++ with this one.
load(string & filename){
string command;
char delimiter = '/';
size_t delimiterPos = filename.rfind(delimiter);
string directory = string(filename.c_str(),delimiterPos);
command = "import path ";
//want to add directory to end of command
string temp = command + "hello!"; // This works
command.append(directory); //This works!
command += directory; //This seg faults!
...
}
in GDB when I “print” filename at the beginning of the function I get:
(const string &) @0x9505f08: {static npos = 4294967295,
_M_dataplus = {> = {<__gnu_cxx::new_allocator> = {}, }, _M_p = 0x950a8e4 “../config/pythonFile.py”}}
What the heck, how is filename formatted incorrectly, such that .append() works and += doesn’t?! Something strange in the overloaded function += in C++?
g++ version 3.4.6
Maybe it has to do with how you are constructing “directory” here
Is rfind somehow failing? If rfind failed, it would return std::npos as specified here. I’m not sure what the behavior would be if you passed npos into the string constructor. It may be platform dependent.
This doesn’t answer why “append” would work and “+=” would crash. You may also have some kind of heap corruption (maybe caused by the npos and C string passed into the constructor above) and maybe when += is called new memory needs to be allocated. Append for whatever reason may not need to allocate new memory.
In any case, it would be wise to add a check for npos.