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...

Reply via email to