#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main()
{
int a[]={0,1,2,3};
int *r[]={NULL};
for(int i=0;i<4;i++)
{
r[i]=&a[i];
cout << &a[i] << endl;
cout << a[i]<<endl;
}
for(int i=0;i<4;i++)
{
cout << r[i] << endl;
cout << *r[i] << endl;
}
return 0;
}
我最近开始研究指针数组。有人可以帮助我找出上述程序中的错误..
在Windows和Linux平台上运行时,我附上了结果的屏幕截图。
在Windows上,* r []和[]的地址匹配,但值仍然不匹配。
在linux上,它有时会说“BUS ERROR”,有时会说“Segmentation fault”。
如果有人解释“BUS ERROR”的含义会更好吗?为什么要这个计划。
答案 0 :(得分:7)
你的数组r
只有一个单独元素的空间,但你存储了4.那会覆盖内存,导致崩溃。
改变这个:
int *r[]={NULL};
为:
int *r[sizeof a / sizeof *a];
这使得r
与a
具有相同数量的元素,换句话说就是4。
答案 1 :(得分:3)
答案 2 :(得分:3)
您没有为r
分配足够的空间。试试int *r[4];
,您就不会遇到分段错误。
int *r[] = {0}
它等同于int *r[1];
答案 3 :(得分:0)
r是一个指针数组,但在您的代码中,它只有一个元素。你很幸运在Windows上运行它,但它是一个未定义的行为。它现在似乎可以在您的编译器上运行,但它不是合法的C或C ++,并且无法保证它在下次运行程序时仍然可用。或者它现在还没有覆盖基本数据,而你还没有遇到会导致的问题。