Skip to Content.
Sympa Menu

cgal-discuss - Precondition and assert failures using CGAL 3.3.1

Subject: CGAL users discussion list

List archive

Precondition and assert failures using CGAL 3.3.1


Chronological Thread 
  • From: Tuukka Kataja <>
  • To:
  • Subject: Precondition and assert failures using CGAL 3.3.1
  • Date: Wed, 16 Jan 2008 11:28:35 +0200
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:content-type; b=cMQGuUZCem8qHvz1UH69EsYpXkhglrXVFGvRHWapqOvNjRj5OxZ4Z0MTWgPzpH3d3031KkH54Ebc2724KSOCFN4w6UpFBIhimPhO7E0r5LIyQAJ94jD0hXxBnv7QEDMN8zAmxpEr5hSskWxm4ZDi6MjuAcbDDST7JN9VEZy8t/I=

Hello,
I'm experiencing weird precondition and assert failures when using CGAL with the following system:

64-bit Ubuntu 6.10
gcc 4.1.2
CGAL 3.3.1

As a minimal example, consider the attached code (minkowski.cpp). It terminates with

CGAL error: precondition violation!
Expr: nodeP != NULL && nodeP->is_valid()
File: /usr/local/include/CGAL/Multiset.h
Line: 338
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct NULL not valid


Running through a debugger I get the following backtrace.

Multiset::iterator::operator* at /usr/local/include/CGAL/Multiset.h:338
Basic_sweep_line_2::_sort_left_curves at /usr/local/include/CGAL/Basic_sweep_line_2.h:675
Sweep_line_2::_handle_left_curves at /usr/local/include/CGAL/Sweep_line_2.h:265
Basic_sweep_line_2::_sweep at /usr/local/include/CGAL/Basic_sweep_line_2.h:393
Basic_sweep_line_2::sweep at /usr/local/include/CGAL/Basic_sweep_line_2.h:227
Arr_construction::insert_x_curves at /usr/local/include/CGAL/Sweep_line_2/Arr_construction.h:124
insert_x_monotone_curves at /usr/local/include/CGAL/Arrangement_2/Arrangement_2_insert.h:293
Union_of_cycles_2::_construct_arrangement at /usr/local/include/CGAL/Minkowski_sum_2/Union_of_cycles_2.h:87
Union_of_segment_cycles_2::operator() at /usr/local/include/CGAL/Minkowski_sum_2/Union_of_segment_cycles_2.h:81
Minkowski_sum_by_convolution_2::operator() at /usr/local/include/CGAL/Minkowski_sum_2/Minkowski_sum_conv_2.h:333
minkowski_sum_2 at /usr/local/include/CGAL/minkowski_sum_2.h:52
main at minkowski.cpp:38


This happens with a multitude of kernels (Homogeneous<CGAL::Gmpzf>, Cartesian<double>, etc.). I've had similar problems using Polygon_set_2 and Nef_polyhedra_2 for boolean operations, but I have no small examples for them. The examples included with CGAL run without any problems.

Does anyone have any idea what might be causing my problems. Am I doing something fundamentally wrong, or could this a problem with 64bit compilation or GCC 4.1.2? I'm reluctant to think this could be a bug in CGAL as I would presume it would have surfaced earlier.

Thanks,
Tuukka Kataja
#include <iostream>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Polygon_2.h>
#include <CGAL/minkowski_sum_2.h>

typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef CGAL::Point_2<Kernel> Point;
typedef CGAL::Polygon_2<Kernel> Polygon;

int main()
{
	Polygon A;
	
	A.push_back( Point( 0.0, 0.0) );
	A.push_back( Point( 2.0, 0.0) );
	A.push_back( Point( 2.0, 3.0) );
	A.push_back( Point(12.0, 3.0) );
	A.push_back( Point(12.0, 0.0) );
	A.push_back( Point(14.0, 0.0) );
	A.push_back( Point(14.0, 5.0) );
	A.push_back( Point( 0.0, 5.0) );
	
	
	Polygon B;
	
	B.push_back( Point( 0.0, 0.0) );
	B.push_back( Point( 6.0, 0.0) );
	B.push_back( Point( 6.0,-2.0) );
	B.push_back( Point( 7.0,-2.0) );
	B.push_back( Point(11.0, 2.0) );
	B.push_back( Point(11.0, 4.0) );
	B.push_back( Point( 8.0, 4.0) );
	B.push_back( Point( 8.0, 1.0) );
	B.push_back( Point( 2.0, 1.0) );
	B.push_back( Point( 2.0, 4.0) );
	B.push_back( Point( 0.0, 4.0) );
	
	Polygon result = CGAL::minkowski_sum_2(A,B).outer_boundary();
	
	std::cout << result;
}



Archive powered by MHonArc 2.6.16.

Top of Page