Problem with closures

Frits van Bommel fvbommel at REMwOVExCAPSs.nl
Thu Jan 11 02:29:16 PST 2007


Alain wrote:
> AddFunc addN(int n) {
>     int add(int i) {
>         return i + n;
>     }
>     return &add; // the add function captured will remember the value of n
> }
[snip]
> Am i missing something?

You shouldn't return delegates to nested functions, just like you 
shouldn't return pointers to local variables.
Delegates to nested functions contain a pointer to the stack frame of 
the enclosing function. If that function has returned, the stack frame 
may be corrupted (especially if you have called another function, like 
apply(), since then).


More information about the Digitalmars-d-learn mailing list