取消引用已分配特定内存地址的指针

时间:2016-06-27 00:30:56

标签: c++ arrays pointers

我正在使用指针和数组,我必须指定数组在内存中的起始位置或指针应该保存的内存地址。指针或数组取地址;但是,我不能尊重或指定一个值。

我尝试运行以下代码,但它给了我Segmentation Fault。我在这做错了什么?请帮忙!

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 

2 个答案:

答案 0 :(得分:2)

  

我在这里做错了什么?

您正在取消引用不指向对象的指针。这有不明确的行为,但如果你运气好,操作系统可能会检测到错误并引发一个seg错误。

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

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 ++中不可能的任意内存。您需要采用特定于平台的方式来处理您的问题。

答案 1 :(得分:0)

首先为int a分配内存,因此你就是分裂。

int *a = new int;
*a = 10;
delete a;

对于第二种情况,您也取消引用空指针。你不需要设置b来解决零问题。通过这样做,我相信你会丢失你的阵列。