我有这个代码,它给了我分段错误。
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。我不能用字符串。
答案 0 :(得分:1)
一个错误是您没有关注CRegister类中的rule of three。这通常会导致段错误。
另一个错误是您没有初始化m_record [i]指针。因此析构函数可以在垃圾值上调用delete []。
第三个错误是您在CRegister :: Add中显然取消引用相同的垃圾值。
答案 1 :(得分:1)
将此行添加到Add
函数声明的顶部,它将解决您的Segmentation Fault
问题。
m_record[m_count] = new TRecord;
但正如您在答案和评论中看到的那样,您的代码存在许多问题。最重要的问题是你没有任何好的垃圾对象计划。所以你的代码有内存泄漏。