Ошибка PCL loadPCDFile()

После того, как я успешно скомпилировал PCL с Visual C++ 2013 x64, я полностью запутался, пытаясь отладить следующую ошибку. При загрузке файла .pcd с помощью pcl::io::loadPCDFile() у меня произошла ошибка утверждения отладки, за которой последовали некоторые ошибки нарушения прав доступа.

std::string fileName = "E:/C PROJECTS/models/generated.pcd";

    target_cloud.reset(new Cloud());

    if (pcl::io::loadPCDFile(model_filename_, *target_cloud) == -1) //* load the file
    {
        PCL_ERROR("Couldn't read .pcd file \n");
        return (-1);
    }

введите здесь описание изображения

введите здесь описание изображения


person Jaume    schedule 15.02.2016    source источник


Ответы (1)


Эта ошибка является (почти) верным признаком того, что вы связываете две разные CRT (библиотеки времени выполнения C) с вашей программой. Каждый CRT имеет свою собственную кучу для распределения памяти. Что-то освобождается одним CRT, которое фактически было выделено другим CRT, и когда освобождающий CRT пытается добавить освобожденную память в свою собственную кучу, обнаруживает, что она там не принадлежит, вызывая утверждение.

Вероятно, ваш PCL скомпилирован для использования CRT, отличного от того, который используется в вашем проекте. Откройте решение PCL, откройте настройки проекта и проверьте настройку в C/C++ -> Генерация кода -> Библиотека времени выполнения. Затем сделайте то же самое в решении вашего собственного проекта, убедитесь, что они совпадают.

Вам также необходимо скомпилировать и PCL, и ваш проект с одной и той же версией Visual Studio (поскольку каждая новая версия поставляется с новым набором CRT... вздох).

В крайнем случае вы также можете проверить окно вывода и отметить, какие библиотеки DLL загружаются, и посмотреть, сможете ли вы обнаружить несколько несовместимых CRT. Информацию об именах файлов можно найти по адресу: https://support.microsoft.com/en-us/kb/140584 или с помощью Google.

Если вы действительно хотите использовать конкретную CRT для своего проекта, вам придется перекомпилировать PCL, чтобы использовать нужную CRT.

person Chungzuwalla    schedule 18.02.2016