Short version:
Assigning an index from a vector to a local string works. Assigning to
a private class member of type string fails with a segmentation fault
apparently caused by a delete[].
I've managed to simplify the test case quite substantially for this bug, but
its still quite convoluted. For this I apologize.
Long version:
Here's a summary of the example: its supposed to be a framework for
implementing model-view-controller type applications in C++. The code is a
foundation for a GTKmm application. We have the Database:: interface which is
implemented by Sqlite::. Each model inherits from the Model:: base class which
is modeled very loosely on the ActiveRecord system in Ruby-on-Rails. The User::
class is a model.
Queries on the database are run through Database::exec() which really is
Sqlite::exec(). The findall() function called in main() is purportedly part of
User:: but actually implemented in Model::.
Now, for the bug.
The example causes a SIGSEGV in User::findall() (ie. Model::findall()). But the
shocker is where it happens: line 130 in the example. We've run Sqlite::exec(),
and gotten a vector of strings. We can also loop over the vector and print each
string.
I have no idea why this bug occurs in this specific code. The only thing
remotely unusual is the inheritance pattern (ie. class User: public Model
{} ), but that's not particularly bizarre either.
--
Summary: Segmentation fault when assign std::string to another
std::string when using std::vector and inheritance
Product: gcc
Version: 4.1.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: wmacura at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31314