C++ C+中的指针数组+;“什么是”呢;总线错误“; #包括 #包括 #包括 使用名称空间std; int main() { int a[]={0,1,2,3}; int*r[]={NULL}; 对于(int i=0;i
您的数组C++ C+中的指针数组+;“什么是”呢;总线错误“; #包括 #包括 #包括 使用名称空间std; int main() { int a[]={0,1,2,3}; int*r[]={NULL}; 对于(int i=0;i,c++,arrays,pointers,C++,Arrays,Pointers,您的数组r中只有一个元素的空间,但您存储了4。这会覆盖内存,导致崩溃 更改此项: #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
中只有一个元素的空间,但您存储了4。这会覆盖内存,导致崩溃
更改此项:
#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;
}
致:
这使得
r
具有与a
相同的元素数,换句话说是4。int*r[]={NULL};
应该是int*r[]={0,0,0,0};
这将为以下代码所需的四个指针分配空间
总线错误:您没有为
r
分配足够的空间。请尝试int*r[4];
,您将不会遇到分段错误
int*r[]={0}
它与int*r[1]等价但是,在代码中,它只有一个元素。在Windows上运行它是幸运的,但它是一种未定义的行为。它可能在今天工作,在编译器上,但它不是合法的C或C++,也不能保证它下次运行程序时仍能工作。或者它没有覆盖本质。l即使是现在,您也没有遇到将要引起的问题。2个单词-内存损坏..编写NULL
而不是0
的人(当他们真正想要整数零,而不是空指针时)都是可怕的人。问问Stephan T.Lavavej,他会告诉你战争故事。当我想要一个指针0时,我就写0,我只是不认为为指针设置特殊值有什么意义。创建一个社区wiki问题,比如“我正在写入数组边界之外的索引,为什么我的程序会崩溃/挂起/给出错误的结果?”,这样我们就可以将这些类型的问题标记为重复问题并指向它?@sashoalm,我肯定我们有一些。我搜索了,但没有找到任何问题。
int *r[]={NULL};
int *r[sizeof a / sizeof *a];