Вызвано прерывание возврата базового проекта библиотеки PCL.

Я успешно связал свой базовый проект, содержащий только один файл ReadPc.cpp, очевидно, считывающий облако точек из файла в Visual Studio 2010. приложение, которому я следовал этому руководству

Вот мой код

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

int
main (int argc, char** argv)
{
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
  std::cout << "bejzikl";
  if (pcl::io::loadPCDFile<pcl::PointXYZ> ("kitchen.pcd", *cloud) == -1) //* load the file
  {
    PCL_ERROR ("Couldn't read file test_pcd.pcd \n");
    return (-1);
  }
  std::cout << "Loaded "
            << cloud->width * cloud->height
            << " data points from test_pcd.pcd with the following fields: "
            << std::endl;
  for (size_t i = 0; i < cloud->points.size (); ++i)
    std::cout << "    " << cloud->points[i].x
              << " "    << cloud->points[i].y
              << " "    << cloud->points[i].z << std::endl;

  return (0);
}

Проблемная строка выглядит следующим образом: if (pcl::io::loadPCDFile("kitchen.pcd", *cloud) == -1)

В режиме отладки вывод говорит

First-chance exception at 0x7566812f in Meshes.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0030f36c..
Unhandled exception at 0x7566812f in Meshes.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0030f36c..
The program '[15424] Meshes.exe: Native' has exited with code -529697949 (0xe06d7363).

Я ценю любые советы


person ziker    schedule 04.01.2014    source источник


Ответы (3)


В моем случае это связано с разницей в конфигурации зависимостей и конфигурации проекта. Решено путем изменения конфигурации в режим выпуска, поскольку зависимости моего проекта находятся в режиме выпуска.

person Tharun    schedule 05.08.2014

У меня нет опыта работы с библиотекой PCL, но std::bad_alloc означает, что новая не удалась. «Тип исключений, создаваемых стандартными определениями оператора new и оператора new[], когда им не удается выделить запрошенное пространство для хранения». источник: cplusplus

Возможно, файл, который вы загружаете, слишком велик, или если эта загрузка требует продолжения памяти, у вас ее нет.

Также вы можете попытаться поймать исключение и посмотреть, что ex.what() предложит о причине исключения.

person nix    schedule 06.01.2014

Если вы используете «kitchen.pcd» из туториалов сайта PCL или github, то вам следует знать, что точки этого файла имеют тип . Вы можете открыть файл ".pcd" в wordpad и убедиться в этом. Если это так, измените типы «PointXYZ» на «PointXYZRGB». Надеюсь, это будет полезно!

person elaheh r    schedule 15.01.2014
comment
Тип не может быть проблемой, потому что PCL внутренне позаботится об этом. так, например, если вы ожидаете тип PointXYZRGB, а вместо этого получаете PointXYZ, это не проблема. PCL просто игнорирует поля, которые он не получил, и просто выдает предупреждение. - person NKN; 09.02.2014