On 5/16/21 12:32 PM, Alain De Vos wrote:

Why doesn't this program dups core ?
Is s not recycled ?
```
import std.stdio:writeln;
void main(){
//I point to the heap
int[] p=[1,2,3];
     {
         int[3]s=[1,2,3];
         //I point to the stack
         p=s;
     }
     //Why do I still live ?
     writeln(p[0]);
}

```

To answer your question, why does this not dump core, it's because you didn't access memory that was invalid. Stack memory, like most computer memory, is allocated in chunks to the program. The OS typically allocates pages at a time per request for it. Which means, even though the memory isn't technically in scope, it's not going to cause a segmentation fault (this is a hardware fault saying you accessed an address that doesn't exist in your process).

In order for a dangling pointer (which is what this is) to cause a seg fault, you have to release that memory back to the OS, and make that address invalid before accessing. D very rarely gives memory back to the OS.

The more common problem for dangling pointers is that you access a piece of memory that has since been reallocated to something else, and screw up that something (generally a pointer).

-Steve

Reply via email to