错误:创建对象后无法分配区域
Error: can't allocate region after creating an object
我正在C++学习OOP的各种细节,并编写了该代码。该代码的目的是玩弄 ctor-initializer,并学习如何初始化作为类属性的引用。
#include <string>
#include <iostream>
using namespace std;
class Corgi {
private:
const string nickname;
const string& rNickname;
public:
Corgi(const string& _nickname): nickname(nickname), rNickname(nickname) {}
};
int main() {
Corgi buddy("buddy");
return 0;
}
此代码编译,但是,我在运行时收到此错误消息:
Project(1343,0x7fff7b2f2000) malloc: *** mach_vm_map(size=140734714511360) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
我不明白为什么我会收到此错误消息以及如何解决它。那么,我为什么得到它以及如何解决它?
我感谢任何帮助。
Corgi(const string& _nickname): nickname(nickname), rNickname(nickname) {}
用自身初始化成员nickname
,这是一个问题,因为此时成员nickname
尚未初始化。
修复:
Corgi(const string& _nickname): nickname(_nickname), rNickname(nickname) {}
科里鲁的现场演示
我还考虑过这个:
Corgi(const string& nickname): nickname(nickname), rNickname(nickname) {}
这将适用于正确初始化Corgi::nickname
(由于范围规则(,但它为Corgi::rNickname
引入了一个新问题(现在使用对构造函数参数的引用进行初始化(。
对于这种情况,正确的是:
Corgi(const string& nickname): nickname(nickname), rNickname(this->nickname) {}
科里鲁的现场演示
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- 矢量擦除多个区域,2 x 擦除与单个分配?
- 错误:创建对象后无法分配区域
- 创建一个类来访问和指定向量类型,并构建一个获取位置并为其分配区域的类
- 为什么我不能在同一分配中保留两个连续的内存区域,而不通过单个调用保留这两个区域?
- NUMA体系结构上大(8MB)内存区域的可扩展分配
- 无法分配区域;中止陷阱:6 编译器错误
- 是否可以更改C/C++中自动变量的分配区域