On Thursday, 13 August 2020 at 20:04:59 UTC, Andre Pany wrote:
Hi,
in the specification
https://dlang.org/spec/interfaceToC.html#storage_allocation
there is this paragraph:
"Leaving a pointer to it on the stack (as a parameter or
automatic variable), as the garbage collector will scan the
stack."
I have some trouble to understand what does this mean. Given
this example:
```
import std;
void main()
{
int* i;
sample(&i);
writeln(*i);
}
extern(C) export void sample(int** i)
{
*i = new int();
**i = 42;
}
```
Int variable is created on the heap. How do I leave a pointer
on the stack?
You just did - the `int* i` is a pointer left on the stack for
the duration of `main` so the GC won't collect it until after
main returns.
But after main returns, even if `sample` kept a copy of it
somewhere in some other location, the GC might reap it...