[英]regarding pointers in c++
我有這樣的功能
void some_func(some_type *var)
{
// do something a get a var2 of type some_type*
var = var2;
}
我主要是
some_type *var;
some_func(var);
print_var(var);
但是我在運行程序時遇到了分段錯誤。 調試顯示出print_var
是問題,就像var
沒有值一樣。 var2
使用new some_type
初始化,所以我認為我不需要為var
執行此操作。
但是當我在main中執行var = new some_type
並在some_func
手動克隆(將var2
每個數據復制到var
)時,我沒有收到錯誤。
我的問題在哪里? 我不是很習慣於指針和內存分配的事情,但是我認為這兩種方法都應該起作用。 我錯了嗎?
可能的主要問題是,當我在函數中使用new
分配一個指針,然后將其地址保存在指針的參數中時,函數完成后是否會釋放內存?
您需要將定義更改為:
void some_func(some_type*& var)
{
// var will also be changed on the caller side
var = var2;
}
注意,它傳遞了對指針的引用,因此被調用者可以更新指針的值。
您在main()
someType *var
是main()
局部變量,而函數中的*var
是該函數的局部變量。
因此,函數中的var
指向var2
而不是main中存在的那個。
您正在按值傳遞var
。 這意味着在堆棧上制作了一個var
副本,與main中的var
分開。 然后使用var2
初始化此副本。 但是,當some_func
退出時,將彈出堆棧,並且副本將丟失。 main中聲明的var
保持不變。
要解決此問題,一種可能的方法是讓some_func
返回一個指針值,然后可以將其分配給var
。
或者,將您的some_func
聲明更改為
void some_func(some_type *& var)
這通過var
參考,這意味着,所有你關心的var
在some_func
是一樣的var
在main
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.