在结构中分配字符串时出现 Seg 错误
Seg fault when assigning a string in a struct
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
只分配内存 - 你没有对象,只有原始内存。
相关文章:
- C++ - 将元素按升序插入数组的 SEG 错误
- 为什么我在使用 istream 迭代器时会出现 seg 错误?
- 字符串上的合并排序上的 Seg 错误
- 导致 Seg 错误的 SingleLinkedList 的析构函数
- g++ 9.2.1 (Linux) 会导致 seg 错误,但 Windows 上的代码块不会
- 函数抛出seg错误,我不知道为什么
- Microsoft Visual Studio 2019交叉编译CMake库 - 有效,但存在SEG错误
- 由于相同的文件名/类名存在于不同的SO中而导致的SEG错误
- 尝试访问 3D 矢量中的元素时出现 Seg 错误
- 垫子对象数组太大会导致 Seg 错误
- 为什么push_back成矢量<矢量<int>>导致 seg 错误?
- 在向量中存储字符串存在 SEG 错误
- 更改本地类名时出现 seg 错误
- 使用 ->GetString( " ") 时出现 Seg 错误,它位于单独的类中
- 将字符数组转换为 std::string 以传递到 std::bitset seg 错误
- 字符和 int 连接何时会导致 seg 错误?
- 静态数组溢出堆栈(seg 错误 11)仅在类定义内部时,否则不会..?
- .EOF 在读取文件时导致 Seg 错误:FIXXED
- 在 qt5 中使用 QSharedPointer 时出现 Seg 错误
- 为什么我的 if 语句会出现 seg 错误?