A copy of code can be found here: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=ed97d2c71225edc8921d0a72864e419e
I just want to cache a variable computed at runtime to a static variable so that it is globally accessible (I guarantee that they will not be accessed after dropped) without using
I have been playing around
*const S and
MaybeUninit<S> for half a day, but I got severe memory-like problems as demonstrated.
Any clues? If possible, I would prefer not to add any extra dependency.
Your first call to
read is consuming the String, not a copy or reference, so when it then falls out of scope at the end of
consume_var, it's contents are freed. The same raw bytes are still hanging around in
STATIC_VAR, but they're no longer representing a pointer to a valid allocation - you're double-freeing, but 10 times instead of only twice.
In particular, see this note in the
When using multiple copies of the data (by calling
read multiple times, or first calling
read and then
assume_init ), it is your responsibility to ensure that that data may indeed be duplicated.
String cannot be duplicated in this way, because it contains a unique pointer to its contents. (As hinted at by it not being
Copy) To get a reference to the static string, and not free it when you're done, use
get_ref instead of
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.