void func(int* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
這是我遇到的面試問題之一。在main()中,它聲明瞭一個int指針,在另一個函數中分配它的內存並嘗試在main()本身中使用。我認爲這是錯誤的,但這項工作還有什麼意義呢?通過引用有人可以幫助在這個程序中不正確的?
void func(int* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
這是我遇到的面試問題之一。在main()中,它聲明瞭一個int指針,在另一個函數中分配它的內存並嘗試在main()本身中使用。我認爲這是錯誤的,但這項工作還有什麼意義呢?通過引用有人可以幫助在這個程序中不正確的?
ptr
被傳遞到由funcn
值,從而所述參數ptr
只獲取的ptr
副本中main
。對func
的ptr
的任何更改都不會修改main
的ptr
,因此存儲器未分配給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;
}
在指針示例的指針中,'func'的主體應該看起來像'* ptr = new int;'不應該嗎? – user888379
@ user888379;接得好! – haccks
在'從函數返回指針'的例子中,func是否應該在分配內存之後返回ptr? – SwappyCplusplus
void func(int&* ptr)
{
ptr = new int;
}
int main()
{
int* ptr;
func(ptr);
*ptr = 2;
}
通指針,而不是由值
我認爲它應該在函數參數 – user3309301
上使用引用「&」您並未在任何地方刪除指針。這是內存泄漏。 另外,別人說,你需要通過referecne(或ptr到ptr)傳遞指針。 你真的應該初始化所有局部變量('int * ptr;'這裏)。 – Zsolt