2014-06-24 66 views
1
void func(int* ptr) 
{ 
    ptr = new int; 
} 

int main() 
{ 
    int* ptr; 
    func(ptr); 
    *ptr = 2; 
} 

這是我遇到的面試問題之一。在main()中,它聲明瞭一個int指針,在另一個函數中分配它的內存並嘗試在main()本身中使用。我認爲這是錯誤的,但這項工作還有什麼意義呢?通過引用有人可以幫助在這個程序中不正確的?

+0

我認爲它應該在函數參數 – user3309301

+0

上使用引用「&」您並未在任何地方刪除指針。這是內存泄漏。 另外,別人說,你需要通過referecne(或ptr到ptr)傳遞指針。 你真的應該初始化所有局部變量('int * ptr;'這裏)。 – Zsolt

回答

2

ptr被傳遞到由funcn值,從而所述參數ptr只獲取的ptr副本中main。對funcptr的任何更改都不會修改mainptr,因此存儲器未分配給main中的指針ptr。分配給未初始化的指針

*ptr = 2;  

調用未定義行爲

可能的解決方案:

使用指針的指針

void func(int** ptr) 
{ 
    *ptr = new int; 
} 

int main() 
{ 
    int* ptr; 
    func(&ptr); 
    *ptr = 2; 
} 

從函數返回指針:

int* func(int* ptr) 
{ 
    ptr = new int; 
} 

int main() 
{ 
    int* ptr; 
    ptr = func(ptr); 
    *ptr = 2; 
} 

使用參考:

void func(int&* ptr) 
{ 
    ptr = new int; 
} 

int main() 
{ 
    int* ptr; 
    func(ptr); 
    *ptr = 2; 
} 
+0

在指針示例的指針中,'func'的主體應該看起來像'* ptr = new int;'不應該嗎? – user888379

+0

@ user888379;接得好! – haccks

+0

在'從函數返回指針'的例子中,func是否應該在分配內存之後返回ptr? – SwappyCplusplus

1
void func(int&* ptr) 
{ 
    ptr = new int; 
} 

int main() 
{ 
    int* ptr; 
    func(ptr); 
    *ptr = 2; 
} 

通指針,而不是由值

相關問題