需要有关'的帮助;新';C+中的运算符+; 我想了解C++中的新操作符以及我的代码中的内容。 我有两个文件A和B,都可以编译。但是我在运行A的二进制文件时遇到了错误“分段错误”。B的二进制文件工作正常

需要有关'的帮助;新';C+中的运算符+; 我想了解C++中的新操作符以及我的代码中的内容。 我有两个文件A和B,都可以编译。但是我在运行A的二进制文件时遇到了错误“分段错误”。B的二进制文件工作正常,c++,C++,“新”操作符在文件B中做什么 归档 new操作符为对象分配内存,然后调用构造函数对其进行初始化。在文件A中,不初始化对象,因此将未初始化的指针传递给 FUNC,导致分割错误。当您在C++中定义局部变量时,例如,例如代码>动物< /代码>或 CAT/COD> >,它们不会自动初始化,但会有不确定的值。在没有初始化的情况下以任何方式使用它们都会导致未定义的行为。对于指针来说,这意味着它将指向一个看似随机的位置。这是一个非常基本的问题。。。读一本书或者用谷歌搜索一下。你错过了指针是什么和做什么的基本概

“新”操作符在文件B中做什么

归档


new
操作符为对象分配内存,然后调用构造函数对其进行初始化。在文件A中,不初始化对象,因此将未初始化的指针传递给<代码> FUNC,导致分割错误。

当您在C++中定义局部变量时,例如,例如代码>动物< /代码>或<代码> CAT/COD> >,它们不会自动初始化,但会有不确定的值。在没有初始化的情况下以任何方式使用它们都会导致未定义的行为。对于指针来说,这意味着它将指向一个看似随机的位置。这是一个非常基本的问题。。。读一本书或者用谷歌搜索一下。你错过了指针是什么和做什么的基本概念。我不想解释。但是因为有这么多专家在这里。我几天前才开始学习C++的。我会在下次询问谷歌之前,多学些C++,然后继续学习C++的许多问题和疑问。他不及格。指针未初始化,因此该值是随机的。他应该使用
Animal-Animal
并传递地址
&Animal
,以便在不使用新运算符的情况下使用
func()
。不,它们不是空指针。而且行为还没有定义。
#include <iostream>
using namespace std;

class Animal
{
    public:
    virtual void eat() { std::cout << "I'm eating generic food."<< endl; }
};

class Cat : public Animal
{
    public:
    void eat() { std::cout << "I'm eating a rat." << endl;}
};

void func(Animal *xyz){ 
    xyz->eat();
}

int main()
{
    Animal *animal ;
    Cat *cat ;
    func(animal);
    func(cat);
    return 0;
}
#include <iostream>
using namespace std;

class Animal
{
    public:
    virtual void eat() { std::cout << "I'm eating generic food."<< endl; }
};

class Cat : public Animal
{
    public:
    void eat() { std::cout << "I'm eating a rat." << endl;}
};

void func(Animal *xyz){ 
    xyz->eat();
}

int main()
{
    Animal *animal = new Animal;
    Cat *cat = new Cat;
    func(animal);
    func(cat);
    return 0;
}
Animal *animal = new Animal;
Cat *cat = new Cat;