[SCIP] Multiple SCIP_ConsData cause heap corruption
Gui Jun Ye
gjye2 at student.monash.edu
Thu Oct 22 12:25:08 CEST 2020
Hi Marko,
I can't speak about the SCIP side of things, but on C++ side of things I
believe this may somehow violate the One Definition Rule (ODR
<https://en.wikipedia.org/wiki/One_Definition_Rule>). Violation of ODR
is undefined behavior and I would speculate this is why there is heap
corruption.
Building on top of the previous replies, I would try using a tagged
union (or since you have access to C++17 use the better std::variant
<https://en.cppreference.com/w/cpp/utility/variant>). Then you can
typedef (once only!)
using SCIP_ConsData = std::variant<ConsData1, ConsData2, ConsData3>;
and at call sites use std::get<ConsDataX> if you know the underlying
datatype is (or use .index() to query the tag) to cast it back to the
underlying type.
I am not confident this solution will work, but hopefully this gives you
an idea of why this problem arises.
Regards,
Jim
On 22/10/20 7:37 pm, Horváth Markó wrote:
> Dear All,
>
> I am working on a branch-and-price project using SCIP, but I got stuck
> on something. Actually, I reduced my problem to a "simple" C++ issue,
> but due to the design of SCIP maybe you have already run into this
> problem and know the solution.
>
> So, my problem is that I have three different user-defined constraints
> and thus three different user-defined constraint data, that is, three
> different structures in three different .cpp files with the same name:
> SCIP_ConsData. (Due to the design of SCIP, I must use this name for
> all structures). Everything was fine when I used only the first two
> constraints (it was also a luck, I guess), however, the third one
> ruined everything. The problem is that in runtime these structures are
> mixed up which causes a heap corruption.
>
> More precisely, I have three SCIP_ConsData structures in different
> .cpp files (say, one.cpp, two.cpp, three.cpp) and when I want to
> create a new instance of the corresponding SCIP_ConsData in file
> two.cpp, the structure in file one.cpp is going to be created. Later,
> it will cause a heap corruption.
>
> What should I do to fix this issue?
>
> I attach a very minimal working example for this phenomenon. I use
> Visual Studio 2019 under Windows 10 with C++17 Standard.
>
> Best Regards,
> Marko
>
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> https://listserv.zib.de/mailman/listinfo/scip
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.zib.de/pipermail/scip/attachments/20201022/5b5469a8/attachment.html>
More information about the Scip
mailing list