在结构中分配字符串时出现 Seg 错误

Seg fault when assigning a string in a struct

本文关键字:Seg 错误 字符串 结构 分配      更新时间:2023-10-16
struct Person {
    int age;
    string name;
};
int main() {
    struct Person* firstPerson;
    firstPerson = new Person();
    firstPerson->age = 23;
    firstPerson->name = "John Doe";
    cout << firstPerson->age << " " << firstPerson->name;
    return 0;
}

当我执行上述操作时,一切都运行良好,并且没有seg错误。但是,如果我将上述内容更改为

int main() {
    struct Person* firstPerson;
    firstPerson = static_cast<struct Person*>(malloc(sizeof(struct Person)));
    firstPerson->age = 23;
    cout << firstPerson->age;
    firstPerson->name = "John Doe";
    return 0;
}

我遇到分段错误。

您只能单独使用 malloc 创建 POD 结构。 malloc 只分配内存,但复杂类也需要初始化。使用 new 分配包含更复杂(非 POD(数据类型的结构(如string (。如果你真的需要使用malloc,你可以使用放置新运算符:

void* foo = malloc(sizeof(struct Person));
firstPerson= new(foo) Person();

放置新运算符在已分配的内存块上执行给定类型的初始化(构造(。

使用 new 构造对象,而不是malloc

Person* firstPerson = new Person();

new分配内存在那里构造对象。 malloc只分配内存 - 你没有对象,只有原始内存。