2011-11-03 179 views
1

我在我的類中得到了一個指向char的指針,稍後將用於引用char數組 這個大小對我來說是未知的,因此我想引用它作爲char *C++初始化字符指針爲空

我似乎無法將其賦值null。

它只是顯示爲壞PTR例外

我怎麼能initalize它使我的構造函數,我可以爲「字符數組」分配空間 這就是我要完成的,看起來很簡單,如果它寫在c。

 ctor 
    { 
      if(m_data != NULL) 
        m_data = new char[m_size]; 
    } 
+0

你可能會更好使用'std :: vector '(或可能是'std :: string')。如果由於某種原因你真的需要自己管理內存,不要忘記析構函數,複製構造函數和複製賦值操作符。 –

+0

謝謝, 是的,我需要自己管理它。 –

回答

6

不要爲NULL測試未初始化的數據,只是做:

MyClass::MyClass(): // ctor 
    m_size(/* something appropriate */), // Note: m_size must precede m_data in the 
             //  class' definition 
    m_data(new char[m_size]) 
{ 
} 
2

的成員變量總是在那裏,你沒有檢查NULL。使用

3

初始化列表:

ctor(const size_t n) : m_size(n), m_data(new char[n]) {} 

此外,std::vector往往是你會在C用什麼++對於具有這種形式的類。

0

這真的很奇怪,你可以嘗試將指針設置爲'\ 0'或0並與之相比較。它指向它應該有一個內存地址之後,所以它不會爲零。

1

當您創建對象時,char*不會如果不說的話,該值將是垃圾,會調用未定義的行爲初始化爲NULL,除非你明確說的那麼

ctor 
{ 
    m_data = NULL; 
} 

如果你使用/取消引用它。

後來,當你要創建的陣列,您可以:

method 
{ 
    if(!m_data) 
     m_data = new[] ... 
} 

,或者如果你知道數組的大小,當您創建對象,那麼你可以做其他人所說

ctor : m_data(new char[size]); 

你應該仔細檢查,如果你真的需要一個char *。也許std::stringstd::vector會更好。