类中结构中的Const * char语言 - 分割错误

const * char in struct in class - segmentation fault

本文关键字:语言 错误 char 分割 结构 Const      更新时间:2023-10-16

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

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,它工作。我不明白为什么。你能帮我吗?

注:

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

m_record[m_count] = new TRecord;

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

一个错误是您没有在您的注册类中遵循三规则。这通常会导致段错误。

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

第三个错误是您在

中解引用了相同的垃圾值。