【发布时间】:2019-07-04 09:27:22
【问题描述】:
我正在使用 C++ 开发我的爱好项目,并且想测试不同类型变量的连续内存分配(例如具有不同类型变量的数组)。如何检查特定的内存地址是否可用?
更多详情:
假设我们有以下代码:我们有一个整数int_var,(这个变量位于哪个内存地址无关紧要),为了在地址后面分配一个不同类型的变量int_var 的地址我需要检查该地址是否可用,然后使用它。我尝试了以下代码:
int int_var = 5;
float* flt_ptr = (float*)(&int_var + (sizeof(int_var) / sizeof(int)));
// check if flt_ptr is successfully allocated
if (flt_ptr) { // successfully allocated
// use that address
} else { // not successfully allocated
cout << "ERROR";
}
问题是:当我运行程序时,有时flt_ptr 被成功分配并且正常,有时没有 - 但是当它没有成功分配时,它会抛出一个异常,显示“读取访问冲突......”打印"ERROR"。这是为什么?也许我错过了检查flt_ptr 是否已成功分配的内容?还是做错了什么?如果是这样,在我使用之前如何检查flt_ptr是否分配成功?
谢谢!!
【问题讨论】:
-
新展示位置怎么样?
-
为什么你要“在
int_var的地址之后的地址中分配一个不同类型的变量”?如果可能,它会给你带来什么? -
在任何情况下,它都不是“分配的,没问题的”。它可能似乎起作用,但它是未定义的行为。如果您需要执行此类操作,请分配一块内存并根据需要使用它。但是您确实需要先分配它。正如有人问的那样,为什么这是必要的?
-
这似乎是一个XY_Problem,看看 Cmets OP 在 Babajan 的回答中给出的答案:据我所知,他实际上是在寻找一种数据结构来将不同类型存储在连续内存中。
-
需要澄清的是:您为什么要这样做?
标签: c++ pointers memory-management