gpt4 book ai didi

c - C/Linux 指针到指针的段错误

转载 作者:太空狗 更新时间:2023-10-29 15:56:28 26 4
gpt4 key购买 nike

在下面的代码中我得到了一个段错误:

Set *getpar() {...}

char function(...)
{
Set **S;
*S = getpar(); /* Segmentation Fault */
...
}

但奇怪的是,几乎没有变化就没有段错误:

Set *getpar() {...}
...
char function(...)
{
Set *S; // One less '*'
S = getpar(); // One less '*'
...
}

据我所知,如果有一个 'Set **S' 那么 *S 是一个指向 Set 对象的指针,所以如果第二个代码工作正常,为什么不应该第一个?第一个代码的 *S 等同于第二个代码的 S ,我说的对吗?我该如何解决这个问题?

最佳答案

Set **S 未初始化,但您在下一条语句中取消引用 S:

*S = 随便

除非你真的非常倒霉,并且 S 指向你实际可以访问的内存位置,否则你正在尝试取消引用无效指针。

你需要先分配你的指针:

Set **S;
S = (S**)calloc(sizeof(S*),1);
*S = getpar();

或者,或者(我认为更可取):

Set *S;
Set **T = &S;

S = getpar();

/* whatever else */

关于c - C/Linux 指针到指针的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/789826/

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