[gecode-users] NaryUnion, infinite loop
Guido Tack
tack at gecode.org
Fri Mar 30 00:41:33 CEST 2012
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
More information about the users
mailing list