Conversation

Is there a formal definition for what it means for a language to be spatially memory-safe but not temporally memory-safe? Is it something like "memory-safe under the assumption that, once freed, that memory block (whether heap or stack) will never be reused"?
11
30
Replying to
I don't really see how you can have one without the other. If you reduce the size of a dynamic array from 2M to 1M in-place and then access beyond 1M due to lack of temporal safety that looks a lot like an out-of-bounds access to me. They're not really cleanly separated things.
3
3
Replying to and
Hmm. spatial safety: all accesses are to memory that has been allocated? temporal safety: no accesses to memory that has been deallocated? C - neither Java - both (excluding the evil low-level API)
2
Replying to and
boost::variant<int, double, std::string> Type stored inside changes. Outer object lives, memory still there, but references to inside are invalidated. std::shared_ptr<std::vector<int>> is shared between 2 threads. Both of them are appending at the same time. Which kind is that?
2
1
Replying to and
boost::variant - I viscerally hate incoming pointers - arguably the problem is the "references to the inside" *aren't* invalidated. Seems similar to pascal variants: temporal not spatial? std::shared_ptr - don't know recent C++. if they empty the pointer, spatial not temporal?
1