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;
}
我遇到了分段错误。
答案 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运算符在已分配的内存块上执行给定类型的初始化(构造)。