2013-09-28 61 views
0

我很好奇,爲什麼一些像這樣的代碼給出了一個段錯誤複製的結構指針的指針

square->type=start.type 

他們是同一類型的結構,廣場是一個指針,開始是沒有的。我認爲start.type中的值將被複制到square指向的類型部分。

有人可以解釋segfault背後的原因嗎?

+1

廣場一個空指針 – FRob

+0

如果你顯示更多的代碼,比如使用它的上下文會更好。但是讓這個代碼工作'square'需要不是NULL。 – fen

+0

這條線本身沒有錯。如果失敗,那是因爲方形指針有問題。 – john

回答

3

這可能是以下原因之一:

  1. square爲空。
  2. square不爲空,但未初始化,表示它沒有指向有效的對象。
  3. square在執行該行之前被刪除,這也意味着它沒有指向有效的對象。
  4. 重載賦值運算符type(如果type是一個類/結構並且它的賦值運算符被重載),有些地方是錯誤的。
  5. start是一個參考,被deferencing空分配,例如:

    Apple *apple=0; 
    Apple &start = *apple; 
    
  6. 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