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 ненадежен ... иногда кажется, что он делает то, что вы ожидали, и в основном это не так, особенно когда вы находитесь под стрессом или демонстрируете свой код, или ... –