我正在使用指针和数组,我必须指定数组在内存中的起始位置或指针应该保存的内存地址。指针或数组取地址;但是,我不能尊重或指定一个值。
我尝试运行以下代码,但它给了我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
答案 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来解决零问题。通过这样做,我相信你会丢失你的阵列。