![](/img/trans.png)
[英]Segmentation fault or Suspicious pointer-to-pointer conversion (area too small)
[英]Segmentation Fault with pointer-to-pointer with C / Linux
在下面的代碼中我得到一個分段錯誤:
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
相當於第二個代碼的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 */
** S未初始化。 它指向什么(垃圾),然后在下一個語句中取消引用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.