C++ Object Segmentation Fault (core dumped) 错误

C++ Object Segmentation Fault (core dumped) Error

我是 C++ 的新手,请放轻松,所以我有以下 class:

class DATA
{
    private:
        char* Name;
        char* Address;
        int Id;
        void initData(int size=200)
        {
            (this->Name)=(char*)malloc(sizeof(char)*size);
            (this->Address)=(char*)malloc(sizeof(char)*size);
        }
    public:
        void readData(void)
        {
            this->initData();
            printf("Enter Name: "); scanf("%s\n",this->Name);
            printf("Enter Address: "); scanf("%s\n",this->Address);
            printf("Enter Id: "); scanf("%d\n",&(this->Name));
        }
        void printData(void)
        {
            printf("Name: %s",this->Name);
            printf("Address: %s",this->Address);
            printf("Id: %d",this->Id);
        }
};

但是当我初始化一个对象然后调用 public 方法时,会发生以下情况:

Enter Name: John Doe
Enter Address: 53 Olive, St.
Segmentation fault (core dumped)

所以,如果有人能告诉我为什么(我知道什么是分段错误,但不明白为什么会出现在这里)。

方法中readData

     printf("Enter Id: "); scanf("%d\n",&(this->Name));

你应该读 Id 这是一个整数,但读入字符串 this->Name 代替。要么

scanf("%d\n",&(this->Id));

由于您使用的是 C++,因此使用 cincout 比使用 C 风格的 scanfprintf 以及 运行 更方便、更容易这类问题。

cin >> Id;

在编写 C++ 代码时不要使用 char*malloc。至少使用 new 或更好地使用 std::string,它也适用于 std::cinstd::cout。您的示例泄漏内存,因为您从不释放名称和地址。

分段错误是由scanf("%d\n",&(this->Name))引起的,正如已经指出的那样,应该是&(this->Id)