[英]Why shouldn't a C++ method return a dereferenced pointer?
我是C ++(和學習Java)的新手。 這是來自硬件的,但是我想我已經回答了硬件問題,我只是想更好地了解指針。
說我有以下方法:
int cubed(int a) {
int * ptr;
*ptr = a * a * a;
return *ptr;
}
可以使用以下代碼進行編譯和正常工作:
int test = cubed(3);
我試圖弄清為什么返回取消引用的指針不好。
這個問題說內存泄漏是一個問題,但是我不確定為什么。 也許是因為我不了解取消引用的指針會發生什么。
那時候左值是否無限期地徘徊? 您是否必須刪除指針? 任何見識將不勝感激。
您閱讀的問題有所不同。 假設您有以下代碼:
int cubed(int a) {
int* ptr = new int;
*ptr = a * a * a;
return *ptr;
}
現在,您將泄漏動態分配的int
,因為您將返回它的副本並且永遠不會delete
原始副本。
您的代碼實際上更糟,因為,您不是通過new
進行分配,而是通過未初始化的指向您自己的內存的指針進行寫入。 實際上,您正在寫入一個不存在的int
。
您應該做的是這樣的:
constexpr int cubed(const int a)
{
return a*a*a;
}
或者只是在調用站點上調用std::pow(value, 3)
。
您的代碼中沒有內存鏈接,但是還有另一個大錯誤。
您聲明int * ptr;
在函數int cubed(int a)
,因此它是一個局部變量。
ptr
的值將是隨機的-可能為NULL,可能指向垃圾,可能指向某個完全有效的地址。 您無需初始化變量ptr
,因此您的代碼有時會崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.