对已分配特定内存地址的指针解引用

Dereferencing a pointer that has been assigned specific memory address

本文关键字:指针 引用 地址 内存 分配      更新时间:2023-10-16

我正在使用指针和数组,我必须指定数组在内存中的起始位置或指针应该持有的内存地址。指针或数组接受地址;但是,我不能服从或赋值。

我试图运行以下代码,但它给我分割错误。我哪里做错了?请帮助!

int *a = (int *)0x100;
cout << a << endl;            //prints out 0x100
*(a) = 10;        <------ seg fault on this line

跟在数组代码后面,

int *b = new b[10];
b = (int *)0x0;
cout << b << endl;           //prints out 0x0
b[0] = 10;     <----  seg fault on this line 

我在这里做错了什么?

你正在解引用一个不指向对象的指针。这有未定义的行为,但如果你幸运的话,操作系统可能会检测到错误并引发一个segfault。

解决方案:首先为对象分配内存。如何分配取决于您打算如何使用该对象。分配对象的一种简单方法是使用自动变量:

int main() {
    int object;
    int* pointer = &object; // now you can assign the pointer to the specific memory address of the existing object
    *pointer     = 10;      // dereferencing is OK
}

flag

指针不接受未指定对象的地址吗?

指针将接受指定对象的地址。编译器指定地址。

如何使指针指向地址0x100…

使用强制转换。您的程序已经这样做了。

…然后利用这段记忆达到我的目的?

在标准c++中不可能使用任意内存。您需要使用特定于平台的方法来处理您的问题。

首先为int a分配内存,因为这是分段错误。

int *a = new int;
*a = 10;
delete a;
对于第二种情况,

也是对空指针解引用。你不需要让b的地址为0。这样你就失去了你的阵列。