gpt4 book ai didi

c++ - 如何检查某个内存地址是否可用于 C++?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:37 24 4
gpt4 key购买 nike

我正在用 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 是否已成功分配?

谢谢!!

最佳答案

你假设的这个内存模型在 DOS 中是有效的,在实模式下,内存是连续的字节流。

现在我们有了分页(在 x86 或 x64 中),这是不可能的。因此,您不能对内存“附近”内存的存在做出任何假设。

你必须正确分配,这意味着使用 C++ shared_ptr/unique_ptr/STL。或者,new/malloc 旧的(坏的)方式。

如果您希望变量彼此相邻,请一次分配整个内存(例如,通过结构)。

关于c++ - 如何检查某个内存地址是否可用于 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56884796/

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