簡體   English   中英

const * char in class in struct-分段錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM