请注意,我们将此视为学校练习问题,不确定我是否会在现实生活中使用它。
这样可行:
int main(){
int *** niz[6];
**niz[0] = new int(6);
cout << ***niz[0];
}
但是不要这样做:
int main(){
int **** niz[6];
***niz[0] = new int(6);
cout << ****niz[0];
}
它导致segmen。故障。为什么这样,明星匹配?
但是
答案 0 :(得分:3)
您不要在数组中插入有效地址,因此两者都是未定义的行为,即。在gcc下运行正常,但在clang下引起了段错误。要使其运行,您需要插入实际地址:
int main(){
int * niz1 = new int(6);
int ** niz2 = &niz1;
int *** niz3 = &niz2 ;
int **** niz[6];
niz[0] = &niz3;
std::cout << ****niz[0];
}
whooah,这是我第一次编码四级指针
答案 1 :(得分:1)
请注意niz
完全未初始化。
我们以*niz
为例。它取消引用niz[0]
处的地址。 niz[0]
未被初始化,因此它是未定义的行为
你不需要考虑其他任何事情来弄清楚它为什么会出现分段错误。
两个程序都会产生未定义的行为。不幸的是,第一个运行正常。