int * myFun(const int & a)
{
int * c = new int(a);
int b = *c;
return &b;
}
1.如何解釋(const int & a)
和new int (a)
,它有什麼作用?如何解釋(const int&a)和新的int(a),它有什麼作用?
2.你能告訴我爲什麼有內存泄漏?
int * myFun(const int & a)
{
int * c = new int(a);
int b = *c;
return &b;
}
1.如何解釋(const int & a)
和new int (a)
,它有什麼作用?如何解釋(const int&a)和新的int(a),它有什麼作用?
2.你能告訴我爲什麼有內存泄漏?
的代碼來看,你使用的是C++
你得到一個新的指針c
與你做b
的的a
然後值,用相同的值c
,返回b
,留下c
的泄漏,因爲沒有什麼指向c
了。
在然後結束:
a
是常量b
是c
值,這是a
c
值的指針到一個新的變量不再被引用在你的代碼好點。非常好的一點。編輯:) –
你可能想要從The Definitive C++ Book Guide and List挑選一本初學者書籍,閱讀並重新開始。
在您的問題:
const int & a
是一個常量引用的int
,命名爲a
。基本上,這意味着某個地方指向另一個int變量,其行爲與int相同,但不能更改它的值
new int (a)
表示您在堆的某處爲某個int變量動態分配內存,並初始化那個值爲a
的變量。該表達式返回剛創建的變量的地址
爲什麼會出現內存泄漏?您使用new int(a)
語句分配內存,但從不釋放它。
delete c;
你的函數結束之前:這應該與完成。因爲你返回一個局部變量的地址(你可能需要真正閱讀C++初學者書來理解它的含義),正如註釋中所指出的那樣,這個函數在return語句中有未定義的行爲。
這是哪一種語言? –
我添加了C++標籤,但如果不是,請將其更改爲真正的語言標籤。 –
如果您不知道引用是什麼,您可能需要向C++諮詢介紹性書籍。 – Borgleader