[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