Ori*_*ski 3 c pointers segmentation-fault
在下面的代码中我得到一个分段错误:
Set *getpar() {...}
char function(...)
{
Set **S;
*S = getpar(); /* Segmentation Fault */
...
}
Run Code Online (Sandbox Code Playgroud)
但奇怪的是,几乎没有变化就没有分段错误:
Set *getpar() {...}
...
char function(...)
{
Set *S; // One less '*'
S = getpar(); // One less '*'
...
}
Run Code Online (Sandbox Code Playgroud)
据我所知,如果有一个' Set **S
'那么*S
是指向一个Set
对象的指针,所以如果第二个代码工作正常,为什么不应该第一个?*S
第一个代码相当于S
第二个代码,我不对吗?我该如何解决这个问题?
Set**S未启动,但您在下一个语句中取消引用S:
*S =无论如何
除非你得到真正的,非常不幸的并且S指向你可以实际访问的内存位置,否则你试图取消引用无效指针.
您需要先分配指针:
Set **S;
S = (S**)calloc(sizeof(S*),1);
*S = getpar();
Run Code Online (Sandbox Code Playgroud)
或者,或者(我认为最好):
Set *S;
Set **T = &S;
S = getpar();
/* whatever else */
Run Code Online (Sandbox Code Playgroud)