Появилась проблема, сначала все было ОК, компилировалось и выполнялось, потом вдруг стало выдавать сегментэйшн фолт.
Результаты отладки в GDB:
int main() {
Openbox::RC rc;
...
--->
Openbox::RC::RC() {
SingleNode* new_node = new Openbox::NumberNode(xml_doc,
"resistance/strength", "resistance to screen border (pixels)",
11);
--->
Openbox::NumberNode::NumberNode(xmlDocPtr doc, std::string path,
std::string desc, int value)
: SingleNode(doc, path, desc), i_value(value) {
--->
Openbox::SingleNode::SingleNode(xmlDocPtr doc, std::string path, std::string desc)
: Node(doc, path, desc) {}
--->
Openbox::Node::Node(xmlDocPtr doc, std::string path,
std::string desc)
: xml_doc(doc), str_path(path.c_str()), str_desc(desc.c_str()),
xml_node(find_node(xml_doc)),
str_name((const char*) xml_node->name) {}
--->
xmlNodePtr Openbox::Node::find_node(xmlDocPtr doc) {
int sz = str_path.size(); // ! здесь
и вот в этом месте, Segmantation fault
смотрю значение str_path._M_dataplus._M_p
= (char*) 0x69666E6F (Address 0x69666E6F out of bounds)
(отладка в врапере Insight для GDB)
Что не так с [std::string str_path] ?
Это protected член класса Node.
Наследование такое
class Node;
class SingleNode: public Node;
class NumberNode: public SingleNode;
class RC - сам по себе.
Форум —
Development