私のソリューションには、C++ (vs2010) プロジェクトでいくつかのメソッドを実行する C++/CLI (vs2012) プロジェクトがあります。ネイティブ コードの署名は次のとおりです。
void Pcl::Downsample(std::vector<CloudPointNative>& points, std::vector<std::vector<int>>& clusters)
C++/CLI 側で実行する方法は次のとおりです。
std::vector<std::vector<int>> clusters;
pcl->Downsample(points, clusters);
次に、クラスターを反復しようとします。
for (int clusterIndex = 0; clusterIndex < clusters.size(); clusterIndex++)
{
auto cluster = clusters[clusterIndex];
クラスタのサイズは 7 で、ベクトルの各項目には int のベクトルが含まれます。これは、ネイティブ側のデバッガーで確認できます。マネージ側 (C++/cli プロジェクト) に戻るとすぐに、問題が発生します。clusterIndex == 0 および clusterIndex == 5 の場合は正しく機能します。ただし、clusterIndex のその他の値では AccessViolationException がスローされます。
auto cluster0 = clusters[0]; // works
auto cluster1 = clusters[1]; // AccessViolationException
auto cluster5 = clusters[5]; // works
どうすればいいの?