对象指针的C 内存分配
C++ memory allocation for objects pointers
#include <iostream>
using namespace std;
class test
{
public:
int a,b[100];
test() {
cout << "Constructor called" << " n " ;
a=10;
}
};
int main()
{
test a1;
test *b2;
test *pointer = new test;
cout << a1.a << endl;
cout << pointer->a << " n ";
cout << b2->a << " n ";
return 0;
}
我想知道是否仅由上述代码创建两个对象,用于" A1"对象和"指针"对象指针。我认为指针" B2"不会为此分配内存。在这种情况下,最后一个" cout&lt;&lt; b2-> a"应该会产生分割故障。我正在访问一个我没有分配的内存的位置。但是我没有得到细分错误。编译器就是打印随机值。
我的问题是"这里分配了三个对象或仅两个对象"?为什么没有分段故障?
a1
是在自动内存中分配的。
b2
不是对象(嗯,不是您定义的类型的对象),而是指针,也不指向有效的位置。这是一个悬空的指针,将其删除导致未定义的行为。一切都可能发生。
pointer
是动态内存中对象的指针。它不是对象本身,而是指向new test
创建的对象。
是在这里分配的三个对象或仅两个对象
只有两个。
为什么没有分段故障?
因为未定义的行为意味着任何事情都可能发生。任何行为都是符合标准的。
我假设指针b2
不会为其分配内存吗?
-
一般而言,当创建对象是自动创建内存时。
-
当创建对象指针时,请始终分配
NULL
,避免访问访问。
示例:
test *b2; //not safe
test *b2 = NULL; // SAFE
希望它有帮助。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配