I have a C++ program on Linux that crashes after some time with the message:
*** glibc detected *** free(): invalid pointer: 0x41e0ce94 ***
Inside the program I make extensive use of containers. They have to store objects of a simple class.
EDIT 2009-4-17:
In the meantime it seems clear that the error has nothing to do with the simple class. The error still occurs if I change the containers to hold other datatypes. The problem must be somewhere else in my code, I’m trying to figure it out at the moment…
Consider using a std::string to hold the string value instead of a raw char pointer. Then you won’t have to worry about managing the string data in your assignment, copy, and destruction methods. Most likely your problem lies there.
Edit: There’s no issue with the newer class you posted, and no problem with the first version if you’re only using the char * to point to string constants. The problem lies elsewhere in the program or with the way you’re using the class. You’ll have to spend more time digging in the debugger and/or valgrind to track down the problem. I would figure out what is pointed to at the specified address and try determine why it’s being freed twice.