Похоже, вы думаете, что j
выделяется в кадре стека test_json_lifetime()
(эта память освобождается в конце функции, когда стек разворачивается), и мы возвращаем ссылку на j
( что приведет к висячему указателю).
В этом случае вы правы, что j
выделяется в стеке, однако, когда мы возвращаем Ok(j)
, мы не возвращаем ссылку на j
, скорее мы копируем j
в пространство для Result<(Value)>
, который был выделен в кадре стека main()
до вызова функции test_json_lifetime()
.