0
int* g() {
int j = 2;
return &j;
}
int main() {
using namespace std;
int v = *g();
// assert(v == 2); // Valgrind: Conditional jump or move depends on uninitialised value(s)
}
所以,這斷言導致Valgrind的錯誤,但我不太清楚這是什麼錯誤意味着,爲什麼我不可以打電話聲稱對聲明。Valgrind的:條件跳轉或移動依賴於未初始化的值(一個或多個)
'v'在斷言前被初始化,那爲什麼會導致這個錯誤呢?
預先感謝您。
你不能可靠地返回一個指向這樣的局部變量的指針;該控件返回到調用函數時,該變量已被銷燬。 –
@JonathanLeffler:「不可靠」?這是即時UB! –
而UB是不可靠的......有時它看起來做你所期望的,並且大部分它不,特別是當你處於壓力或展示你的代碼時,或者...... –