gpt4 book ai didi

c++ - 为什么我的代码会产生段错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:19:10 28 4
gpt4 key购买 nike

#include <iostream>
using namespace std;

int main ()
{
int **a;
int b[5] = {3,4,5,6,1};
*a=b;
cout << *((*a)+0) << endl;
return 0;
}

根据我的理解,*((*a)+0)等同于(*a)[0]。我错了吗?如何让上面的代码打印数组的第一个元素?

为什么这个代码有效?

#include <iostream>
using namespace std;

int main ()
{
int *a;
int b[5] = {3,4,5,6,1};
a=b;
cout << *(a+0) << endl;
return 0;
}

当我到处用*a替换a时,为什么会出错?

最佳答案

你访问了一个未初始化的指针

*a=b;

此时 a 指向一个随机位置,正如 undefined behavior 的规则一样,您无法预测会发生什么。对于您来说,这似乎是一个您无法写入的位置,因此您遇到了崩溃。


第二个变体有效,因为你让 a 指向 b,你不会写入未初始化的指针,你实际上 初始化 b 中第一项位置的指针。

关于c++ - 为什么我的代码会产生段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17382123/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com