2017-02-20 92 views
-4

有沒有人知道寫出這個程序崩潰的代碼行的正確方法?
我發現,這是由試圖分配一個值NULL的存儲單元引起的,但我掙扎如何將其正確寫入:C++中的指針問題

#include <cstdlib> 
int position[10]; 

struct ONE { 
    int* ptr; 
}; 

int* f(int x) { 
    return position + x; 
} 

int main() { 
    ONE * main_ptr = NULL; 
    main_ptr->ptr = f(4); // <-- crash 
    return 0; 
} 

我會非常感激,如果有人能找到出了問題,並幫我

+2

語言的名稱是C++不.cpp的(「CPP」往往指的是C預處理器)。當程序中止時,通常稱爲「崩潰」,而不是「粉碎」。短語「雙指針」可以指代'double *'類型。我建議使用「指向指針的指針」這個短語,但那不是你在這裏真正擁有的; 'main_ptr'是一個指向包含指針的結構的指針。 –

+0

沒有「雙指針」之類的東西。有指針的指針。它是「崩潰」,而不是「粉碎」。 –

回答

0

顯然main_ptr不可解引用,因爲它是空的。爲了取消引用指針,指針需要指向一個對象。一種方法來解決它:

ONE one; 
ONE * main_ptr = &one; 

// as before 

您也可以動態分配一個對象(使用<memory>):

std::unique_ptr<ONE> p_one = std::make_unique<ONE>(); 
ONE * main_ptr = p_one.get(); 

// as before 
+0

[Demo](https://ideone.com/1BNoWQ),[alternate demo](https://ideone.com/KEayD2)。 –

+0

哇,謝謝你的回答!我不知道。謝謝! –