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