簡體   English   中英

為什么C ++方法不應該返回解引用的指針?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM