簡體   English   中英

分配實例化結構時出現段錯誤?

[英]Seg fault when assigning an instantiated struct?

struct queens_arg {
  int board[64]; 
  int focus_idx;
};

struct queens_arg *args;
(*args).focus_idx = 0;

代碼如下。 在設置focus_idx = 0發生段錯誤(已調試)。 為什么會這樣呢? 我該如何解決? 謝謝!

發生這種情況是因為您使用了一個指針,但沒有分配任何東西。 因此,您正在寫入不是您自己的內存。

您應該首先按以下方式分配args

struct queens_arg *args = malloc(sizeof(struct queens_arg));

然后,您應該檢查args != NULL 如果沒有,您可以使用以下方法寫入剛剛分配的內存:

args->focus_idx = 0;

問題是您正在創建一個指向struct queens_arg的指針,但沒有將其初始化為指向任何地方。 因此,當你寫

(*args).focus_idx = 0;

您正在跟蹤垃圾指針,從而在運行時導致段錯誤。

要解決此問題,請確保將指針設置為指向某處。 您可以通過以下方法將其指向動態分配的內存:

struct queens_arg* args = malloc(sizeof (struct queens_arg));

在相關說明中,您不需要寫

(*args).focus_idx = 0;

您可以改用以下速記:

args->focus_idx = 0;

它的含義完全相同,但更易於閱讀。

您只聲明了一個指向queens_arg結構的指針,實際上不存在任何結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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