C++初始化字符指针为空
问题描述:
我在我的类中得到了一个指向char的指针,稍后将用于引用char数组 这个大小对我来说是未知的,因此我想引用它作为char *C++初始化字符指针为空
我似乎无法将其赋值null。
它只是显示为坏PTR例外
我怎么能initalize它使我的构造函数,我可以为“字符数组”分配空间 这就是我要完成的,看起来很简单,如果它写在c。
ctor
{
if(m_data != NULL)
m_data = new char[m_size];
}
答
不要为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])
{
}
答
的成员变量总是在那里,你没有检查NULL
。使用
答
初始化列表:
ctor(const size_t n) : m_size(n), m_data(new char[n]) {}
此外,std::vector
往往是你会在C用什么++对于具有这种形式的类。
答
这真的很奇怪,你可以尝试将指针设置为'\ 0'或0并与之相比较。它指向它应该有一个内存地址之后,所以它不会为零。
答
当您创建对象时,char*
不会如果不说的话,该值将是垃圾,会调用未定义的行为初始化为NULL
,除非你明确说的那么
ctor
{
m_data = NULL;
}
如果你使用/取消引用它。
后来,当你要创建的阵列,您可以:
method
{
if(!m_data)
m_data = new[] ...
}
,或者如果你知道数组的大小,当您创建对象,那么你可以做其他人所说
ctor : m_data(new char[size]);
你应该仔细检查,如果你真的需要一个char *。也许std::string
或std::vector
会更好。
你可能会更好使用'std :: vector'(或可能是'std :: string')。如果由于某种原因你真的需要自己管理内存,不要忘记析构函数,复制构造函数和复制赋值操作符。 –
谢谢, 是的,我需要自己管理它。 –