[英]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++ 时,使用cin
和cout
比 C 风格的scanf
和printf
更方便、更容易遇到这些问题。
cin >> Id;
在编写 C++ 代码时,不要使用char*
和malloc
。 至少使用new
甚至更好地使用std::string
,它也适用于std::cin
和std::cout
。 您的示例会泄漏内存,因为您永远不会释放 Name 和 Address。
分段错误是由scanf("%d\\n",&(this->Name))
,正如已经指出的那样,它应该是&(this->Id)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.