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++,因此使用 cin
和 cout
比使用 C 风格的 scanf
和 printf
以及 运行 更方便、更容易这类问题。
cin >> Id;
在编写 C++ 代码时不要使用 char*
和 malloc
。至少使用 new
或更好地使用 std::string
,它也适用于 std::cin
和 std::cout
。您的示例泄漏内存,因为您从不释放名称和地址。
分段错误是由scanf("%d\n",&(this->Name))
引起的,正如已经指出的那样,应该是&(this->Id)
。
我是 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++,因此使用 cin
和 cout
比使用 C 风格的 scanf
和 printf
以及 运行 更方便、更容易这类问题。
cin >> Id;
在编写 C++ 代码时不要使用 char*
和 malloc
。至少使用 new
或更好地使用 std::string
,它也适用于 std::cin
和 std::cout
。您的示例泄漏内存,因为您从不释放名称和地址。
分段错误是由scanf("%d\n",&(this->Name))
引起的,正如已经指出的那样,应该是&(this->Id)
。