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

时间:2014-09-11 22:56:42

标签: c++

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

我遇到了分段错误。

2 个答案:

答案 0 :(得分:2)

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

Person* firstPerson = new Person();

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

答案 1 :(得分:2)

您只能使用malloc创建POD结构。 malloc只分配内存,但复杂的类也需要初始化。使用new来分配包含更复杂(非POD)数据类型的结构(如string)。如果你真的需要使用malloc,你可以使用placement new operator:

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

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