Projekt CMake, zarządzanie pamięcią.

0

Używam Visual Studio 2019,
bibliotekę PCL zainstalowałem używając vcpkg:

vcpkg install pcl[vtk]:x64-windows --featurepackages --recurse

Następnie używając CMake zbudowałem projekt.
Poniższy kod generuje błąd:

try
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr tmpData(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointXYZ pt;

	pt.x = 1.0;
	pt.y = 1.0;
	pt.z = 1.0;
	tmpData->push_back(pt);
}
catch (exception& e)
{
	std::cerr << "Error: " << "\n\t" << e.what() << endl;
}

Co ciekawe nie jest rzucany wyjątek tylko generują się takie komunikaty:

Exception thrown at 0x00007FFDE932C49C (ucrtbased.dll) in TestPcl.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
 	[Managed to Native Transition]	
>	TestPcl.exe!std::vector<pcl::PointXYZ,Eigen::aligned_allocator<pcl::PointXYZ> >::_Tidy() Line 1754	C++
 	TestPcl.exe!std::vector<pcl::PointXYZ,Eigen::aligned_allocator<pcl::PointXYZ>>::~vector<pcl::PointXYZ,Eigen::aligned_allocator<pcl::PointXYZ>>() Line 699	C++
 	TestPcl.exe!pcl::PointCloud<pcl::PointXYZ>::~PointCloud<pcl::PointXYZ>()	C++
 	TestPcl.exe!pcl::PointCloud<pcl::PointXYZ>::__delDtor(unsigned int )	C++
 	TestPcl.exe!std::_Ref_count<pcl::PointCloud<pcl::PointXYZ> >::_Destroy() Line 1134	C++

Jeżeli stworzę projekt nie używając CMake tylko w samym Visual Studnio, wszystko działa prawidłowo.
Jest jakiś problem z zarządzaniem pamięcią, używając innych przykładów to samo dzieje się podczas reallokacji pamięci.
Macie jakieś sugestie co należałoby sprawdzić?

0

CMake generuje plik projektu , wiec pozostaje Ci tylko porównanie czym sie rózni projekt wygenerowany z cmake vs wyklinany w IDE
Ja stawiam że jeden projekt ma więcej parametrów kompilacji niż drugi albo jakieś ekstra #define

Alternatywna droga to obejrzeć parametry z jakimi uruchamiany jest kompilator (myslę o konsoli)

Alternatywna droga II to jeżeli uzywasz ninja to obejrzyj plik build.ninja może Cie to natchnie

1

Problemem jest konflikt pojęć.

Exception thrown at 0x00007FFDE932C49C (ucrtbased.dll) in TestPcl.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

To jest wyjątek systemowy. Proces zrobił coś co spowodował jego natychmistowe zamknięcie. To nie ma nic wspólnego z wyjątkami C++ lub innego języka i nie możesz tego złapać za pomocą try .. catch.

Twój kod ma gdzieś błąd obsługi pamięci. Z call stack wynika, że błąd jest w momencie czyszczenia danych (wywoływany jest destruktor smar pointera).

Jako że raportowany jest dostęp do 0xFFFFFFFFFFFFFFFF to wygląda na nullptr - 1.

Nie znam biblioteki pcl ani jak działa wskaźnik pcl::PointCloud<pcl::PointXYZ>::Ptr, co się dzieje w przypadku kopiowania wskaźnika?

0

Problemem było przejście na nowszą wersję biblioteki Eigen,
kiedyś projekt wysypywał się bo nie było ustawionych flag:

__AVX__, __AVX2__

a teraz wysypywał się bo były one ustawione.
Dziękuję za sugestie.

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1