簡體   English   中英

使用C / Linux指針到指針的分段錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM