[英]const * char in struct in class - 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,它可以工作。 我不明白為什么。 你能幫助我嗎?
PS我不能使用字符串。
一個錯誤是您沒有遵循CRegister類中的三個規則 。 這通常會導致段錯誤。
另一個錯誤是您沒有初始化m_record [i]指針。 因此,析構函數可以對垃圾值調用delete []。
第三個錯誤是您顯然取消了CRegister :: Add中相同的垃圾值的引用。
在Add
函數聲明的頂部添加此行,它將解決您的Segmentation Fault
問題。
m_record[m_count] = new TRecord;
但是正如您在答案和注釋中看到的那樣,您的代碼有很多問題。 最重要的問題是您對垃圾對象沒有任何好的計划。 因此,您的代碼有內存泄漏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.