const * char in struct in class - segmentation fault

时间:2013-04-09 20:34:47

标签: c++ segmentation-fault

我有这个代码,它给了我分段错误。

struct TRecord {
    const char * Id;
    const char * Name;
};
class CClass {
    CClass ();
    ~CClass ();
    bool Add ( const char * id, const char * name);
    TRecord ** m_record;
    int m_count;
};

CClass::CClass (void) {
    m_count = 0;
    m_record = new TRecord * [1000];
}

CClass::~CClass(void) {
    for(int i=0;i<m_count;i++){
        delete m_record[i];
    }
    delete [] m_record;
}

bool CClass::Add (const char * id, const char * name) {
    m_record[m_count] -> Id = new char[11];
    m_record[m_count] -> Name = new char[strlen(name) + 1];

    m_record[m_count] -> Id = id;
    m_record[m_count] -> Name = name;

    m_count++;
    return true;
}

如果我添加例如const char haha​​ [2222];构造TRecord,它的工作原理。我不明白为什么。你能救我吗?

P.S。我不能用字符串。

2 个答案:

答案 0 :(得分:1)

一个错误是您没有关注CRegister类中的rule of three。这通常会导致段错误。

另一个错误是您没有初始化m_record [i]指针。因此析构函数可以在垃圾值上调用delete []。

第三个错误是您在CRegister :: Add中显然取消引用相同的垃圾值。

答案 1 :(得分:1)

将此行添加到Add函数声明的顶部,它将解决您的Segmentation Fault问题。

m_record[m_count] = new TRecord;

但正如您在答案和评论中看到的那样,您的代码存在许多问题。最重要的问题是你没有任何好的垃圾对象计划。所以你的代码有内存泄漏。