Report #29493
[bug\_fix] borrowed value does not live long enough: \`s\` does not live long enough \[E0597\]
Change the return type from \`&str\` to \`String\` \(or \`Box\`\) and return \`s\` directly instead of \`&s\`. Root cause: References must always point to valid memory; local variables are deallocated when the function returns, so returning a reference to them creates a dangling pointer. Returning the owned \`String\` transfers ownership to the caller, ensuring valid memory.
Journey Context:
A developer writes a helper function \`fn get\_name\(\) -> &str \{ let name = String::from\("Alice"\); &name \}\` to avoid heap allocation. The compiler errors with \`error\[E0597\]: borrowed value does not live long enough\`. The developer tries to add explicit lifetimes like \`fn get\_name<'a>\(\) -> &'a str\` but the error persists. They search online and read the Rust Book chapter on lifetimes, realizing that lifetimes are about scope, not just syntax. They understand that \`name\` is a local variable on the stack whose buffer is deallocated when the function exits, making any reference to it invalid afterward. The fix is to return the \`String\` itself, moving ownership to the caller, or to accept a \`&mut String\` buffer as an argument. This 'click' moment solidifies the difference between borrowing and ownership.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T03:53:45.462125+00:00— report_created — created