C++错误的分配错误
C++ bad alloc error
在我的项目中,有一个可以设置房间的关卡类
class Level
{
public:
Room * exit;
Room * position;
Level(Room setExit, Room newPosition);
~Level();
void showPosition();
};
.h 文件中的现实
Level::Level(Room setExit, Room setPosition)
{
exit = &setExit;
position = &setPosition;
}
void Level::showPosition(){
position->printInfo();
}
房间类。
class Room
{
string title;
string info;
Room(string titleInput, string infoInput) :info(infoInput), title(titleInput){};
void printInfo();
.h 函数打印信息
void Room::printInfo(){
cout << title << endl;
}
我的主程序正在运行。
Room room1("Dungeon", "This is a dangerous room.");
room1.printInfo();
Level lvl1(room1, room1);
这工作正常,但是当我打电话时。
lvl1.showPosition();
我得到了一个不好的分配。所以我知道错误出在水平函数 showPosition 中。但是为什么我会收到bad_alloc错误?
Level
构造函数将生成或稍后导致您出现未定义的行为:
Level::Level(Room setExit, Room setPosition)
{
exit = &setExit;
position = &setPosition;
}
参数setExit
和setPosition
就像普通的局部变量一样,换句话说,一旦函数返回,它们就会超出范围(并被破坏(。这给你留下了两个杂散的指针,指向现在被破坏的对象(以及可以重用的内存(。使用这些指针将为您提供 UB。
如果需要使用指针,请将指针作为参数传递,并确保指针指向的对象具有与Level
对象相同(或更长(的生存期。
潜在地,您可以在此处使用std::shared_ptr
。
Level::Level(Room setExit, Room setPosition)
{
exit = &setExit;
position = &setPosition;
}
Room
按值传递。存储将超出范围的临时地址。
相关文章:
- vector.resize()中的分配错误
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 如何修复只读对象中成员的错误分配?
- 无法将错误分配给成员函数中"类型的实体"
- 分段错误分配函数结果
- 如何实现,错误分配中止而不是抛出异常
- C++代码错误分配
- 如何修复错误分配C++运行时错误
- 分段错误 - 分配类困难
- 带有数组类型表达式的错误分配
- Sprintf 缓冲区问题,错误分配给字符数组
- 而 (p=strtok(NULL, "," )) 警告:p可识别的错误分配
- 错误:分配只读位置“arr2.IntArray::operator[](1)”arr2[1]=24;
- std::映射错误分配错误
- 为什么"e.what()"打印"错误分配"?
- std::vector<const char *>的错误分配效果?
- 使用指向类的指针进行错误分配
- 错误:分配只读引用“__b”
- 向量错误分配错误 C++