2011-11-03 177 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会更好。