写入指定的内存位置
Writing to specified memory location
我刚刚开始学习C++所以我可能离这个目标很远,但对我来说要轻松。
我想做的是写入我指定的内存地址 - 如果可能的话?
我使用的代码是:
#include <iostream>
int main()
{
using namespace std;
int i = 100;
int* p = &i;
cout << p << "n";
cout << "Writing" << "n";
int* w = (int*)0x28ff18;
*w = 101;
cout << *p << "n" << "Done";
return 0;
}
我得到的i
地址是0x28ff18
,那么可以通过指定这个地址来写入该位置吗?而不是使用*p = 101
.显然我正在使用的东西不会改变它,我不知道它在哪里或是否在写101
.
任何简单的解释或帮助都非常感谢。
在大多数计算机和大多数编译器上,这样的东西可能会起作用。但是C++标准并不能保证这一点。
例如,当我在 Windows 计算机上使用 MSVC++ 编译和运行您的代码时,每次地址都不同。您不能期望它在同一程序的不同运行之间是相同的。
另请注意,存储指针值的整数应该足够大(例如,当您有 64 位指针时,为 64 位整数)。如果你想这样做,请使用uintptr_t(感谢拉斯曼斯指出这一点)。
i
的地址可能因程序的一次运行而异。这是非常不安全的。请不要这样做;内存地址隐藏在C++中指针抽象后面是有原因的。
唯一可以看到内存地址文本的地方是非常小的嵌入式系统和操作系统内核/驱动程序。
尽管可以写入特定的内存位置,但这并不一定意味着这样做是安全的。
在您拥有整个内存空间(特别是嵌入式系统)的环境中,写入特定内存地址以执行内存映射 I/O 操作是很常见的。在操作环境控制内存空间的情况下,写入尚未分配给程序的任何内存都是不安全的。
相关文章:
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 如何在不等待检索的情况下获取C++中的内存位置?
- 向量的内存位置不连续
- 如何根据C++在同一内存位置重新初始化 C# 中的对象(还是自动完成)?
- 常量引用的内存位置
- C++强制变量到一个固定的内存位置
- 为什么未初始化的内存位置的值给出 -842150451 的值?
- 为什么存储在内存位置的值会发生变化?
- 在特定内存位置构造 c++ 对象
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 内存位置出现Microsoft C++异常:std::out_of_range
- 函数,返回变量c++占用的内存位置的大小
- 无法在 Opencv 中显示图像导致内存位置
- 从十六进制到双的转换始终导致内存位置的 std::out_of_range
- 错误 在测试.exe 0x76C9FD62时出现未经处理的异常:Microsoft C++异常:内存位置0x006FF8
- 错误:内存位置的 std::length_error
- C++不同内存位置中的默认数组值
- 为什么动态分配的两个变量的内存位置不是连续的?
- Boost.进程间内存位置
- 查找编译时构造类的内存位置