繁体   English   中英

C++ 对象分段错误(核心转储)错误

[英]C++ Object Segmentation Fault (core dumped) Error

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

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);
        }
};

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

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 您的示例会泄漏内存,因为您永远不会释放 Name 和 Address。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM