gpt4 book ai didi

c++ - 无法访问用 operator new() 分配的内存

转载 作者:太空狗 更新时间:2023-10-29 22:56:23 25 4
gpt4 key购买 nike

struct Person {
std::string name;
int id;
};
struct Community {
std::string name;
Person people[2];
};

Community* makeCommunity() {
Community* c = (Community*)operator new(sizeof(Community), std::nothrow);
if(!c) {
std::cout << "Failed to allocate" << std::endl;
std::exit(0);
}
c->name = "Community Name";
c->people[0].name = "Person1";
c->people[0].id = 1;
//Run-time encountered here.
c->people[1].name = "Person2";
c->people[1].id = 2;
return c;
}

我目前正在学习 C++,我正在测试与上述代码类似的代码,当程序遇到运行时错误并在尝试执行 c->people[1].name = "Person1"; 在上述函数中。然而,当我将内存分配为:

Community* c = new Community(std::nothrow);

令我感到困惑的是 c->people[0].name = "Person1"; 执行得很好,但是 c->people[1].name = "Person2 "; 在为 Community 分配内存时在运行时失败:

Community* c = (Community*)std::operator new(sizeof(Community), std::nothrow);

有人可以阐明这一点吗?

最佳答案

电话

Community* c = (Community*)operator new(sizeof(Community), std::nothrow);

没有正确创建 Community 类型的对象。它只是为它分配内存。您需要使用放置 new 运算符来正确初始化对象。

使用 *c 作为有效的 Community 会导致未定义的行为。

如果您必须使用operator new,我建议将该行更改为:

void* ptr = operator new(sizeof(Community), std::nothrow);
Community* c = new (ptr) Community;

关于c++ - 无法访问用 operator new() 分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48371705/

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