c++ - 为什么分配成员会引发 NullReferenceException?

标签 c++ class nullreferenceexception

我已经尝试让这段代码正常工作很长一段时间了,不幸的是,我总是得到 NullReferenceException。我发现如果不使用指向该类的指针,这段代码就可以工作,但我不明白为什么指针会导致这个异常。顺便说一句,我对 C++ 不是很有经验,所以你能以简单的方式解释一下。提前致谢。

class Box
{
    public: char* data;
};
int Main()
{
    Box* a;
    a->data = "Hello World";
    return 0;
}

最佳答案

Box* a; 声明一个指向 Box 对象的指针。您永远不会创建 Box 对象,因此a 不会指向任何东西。

因此,写入 a->data 的行为是未定义

要么放下指针以获得 Box a;,要么使用 Box* a = new Box();。在后一种情况下,不要忘记调用 delete a; 否则你会泄漏内存。

最后,编写 a->data = "Hello World"; 可能会有问题:a->data 将成为指向 read-仅字符串文字;试图修改该缓冲区内容的行为是未定义

最好使用 std::string 作为 a 的类型。

关于c++ - 为什么分配成员会引发 NullReferenceException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35571741/

相关文章:

c++ - int->double->int 是否保证保值?

c++ - 创建 is_primitive 或 is_inheritable 模板

c++ - 通过 cmake 在 vi​​sual studio 中设置优化设置

ruby - 默默换个类?在 Ruby 中可能吗

python - 从另一个模块调用python中的私有(private)类成员函数

ruby - 如何检查一个类是否已经存在于 Ruby 中

c# - Html.OpenIdSelectorScripts 辅助方法抛出 NullReferenceException

c++ - Qt 图像列表

c# - Entity Framework 中记录插入的空引用异常

visual-studio-2012 - VS2012:“属性页”未打开:对象引用未设置为对象的实例