On 29/03/2012, at 7:56 PM, Jean-Noël Monette wrote:

> Hello,
> 
> Here is a new problem I came across with NaryUnion. As suggested by 
> Christian, I created a fresh region for every new NaryUnion, however I ran 
> into an infinite loop. Below is a minimal example. I located the infinite 
> loop inside the "two(I& i, J& j)" method of NaryUnion, and the reason seems 
> to be that, after the call to "RangeList* t = range(j)" in the "else if" 
> block (I unfortunately cannot give you line numbers as I messed around with 
> print statements), "i.c" and "t" point to the very same RangeList (while they 
> should not). I'm not expert enough to go deeper/further...
> 
> Notice that this appears only when region2 is created in a block (in real 
> code, it would be inside a "for" or a "if"), however there is no influence if 
> it is actually used or not.
> 
> I guess it is again related to the Region implementation that is going to 
> change, but I think it is worth mentioning it anyway.

Memory allocated from a region only lives as long as the region, and by passing 
u0 out of its region's scope, you get a dangling pointer.  It's like writing

char* c;
{ string s = "hello"; c = s.c_str(); }
string s = "world";
printf("%s",c);

which will probably print world rather than hello.  So I'd say this is a bug in 
your code (and we should improve the documentation to make this clear).

Cheers,
Guido


_______________________________________________
Gecode users mailing list
users@gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users

Reply via email to