0
我很好奇,爲什麼一些像這樣的代碼給出了一個段錯誤複製的結構指針的指針
square->type=start.type
他們是同一類型的結構,廣場是一個指針,開始是沒有的。我認爲start.type中的值將被複制到square指向的類型部分。
有人可以解釋segfault背後的原因嗎?
我很好奇,爲什麼一些像這樣的代碼給出了一個段錯誤複製的結構指針的指針
square->type=start.type
他們是同一類型的結構,廣場是一個指針,開始是沒有的。我認爲start.type中的值將被複制到square指向的類型部分。
有人可以解釋segfault背後的原因嗎?
這可能是以下原因之一:
square
爲空。square
不爲空,但未初始化,表示它沒有指向有效的對象。square
在執行該行之前被刪除,這也意味着它沒有指向有效的對象。type
(如果type
是一個類/結構並且它的賦值運算符被重載),有些地方是錯誤的。start
是一個參考,被deferencing空分配,例如:
Apple *apple=0;
Apple &start = *apple;
start
是一些參考和東西被刪除,如:
Apple *apple=new Apple();
Apple &start = *apple;
delete apple;
square->type = start.type; // this line may not cause segfault but this is actually undefined behavior
廣場一個空指針 – FRob
如果你顯示更多的代碼,比如使用它的上下文會更好。但是讓這個代碼工作'square'需要不是NULL。 – fen
這條線本身沒有錯。如果失敗,那是因爲方形指針有問題。 – john