如何在特定的内存位置写入数据? C ++

时间:2018-02-01 13:36:46

标签: c++ c++11 pointers memory unsigned

以下是我用于在0x10000000处写入无符号数据的代码。 该程序已编译但运行失败。

void load_program(unsigned base_address){
    char* IM=reinterpret_cast <char*>(base_address);
    unsigned a=0;
    *IM=a;
}
int main(int argc, char** argv) {
    unsigned address=0x10000000;    
    load_program(address);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

操作系统实际上不允许您访问未通过操作系统界面分配的内存。内存管理非常复杂(以https://en.wikipedia.org/wiki/Paging为例)。

您的代码应该在没有操作系统的设备上运行,例如Arduino。

无论如何,如果你想管理你自己的记忆,也许你可以先调用malloc(这是oldschool C风格)来分配一个块,如

int * pointer = 0;
int size = 50000;
pointer = (int*) malloc(size); //pointer now points to the beginning

答案 1 :(得分:1)

在Linux平台上操作系统不允许用户(用户空间进程)选择一个随机地址并将数据放到该地址上,因为普通用户空间进程无权修改/写入RAM的特权区域。 / p>

char* IM = 0x10000000; 
*IM = 10; /** It won't allow you to access */