gpt4 book ai didi

c++ - 当我将一个字符串放入节点->名称时,为什么会出现段错误(核心已转储)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:39 26 4
gpt4 key购买 nike

当我 getline(cin, node->name) 时出现段错误(核心转储)。

我通过在我的输入函数中声明一个 str 字符串,然后 node->name = str 来修复。但是跑到 cin >> node->year 行,仍然遇到 Segmentation fault。

struct client
{
int code;
string name;
int year;
float maths, physics, chemistry;
struct client *next;
};

struct client* input()
{
struct client *node = (struct client *)malloc(sizeof(struct client));

cout << "Code: ";
cin >> node->code;

cout << "Name: ";
cin.ignore();
getline(cin, node->name);

cout << "Year: ";
cin >> node->year;

cout << "Maths, Physics, Chemistry: ";
cin >> node->maths >> node->physics >> node->chemistry;

node->next = NULL;

return node;
}

最佳答案

由于您使用malloc 分配内存,因此新节点 中的任何内容都不会被初始化。特别是 string name 不会被正确初始化,当您尝试使用它时会导致问题,因为涉及它的任何功能都依赖于字符串已被正确构造的事实。而不是这个:

struct client *node = (struct client *)malloc(sizeof(struct client));

这样做:

client *node = new client;

这样,节点(和名称)就被正确初始化了。

关于c++ - 当我将一个字符串放入节点->名称时,为什么会出现段错误(核心已转储)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56183535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com