在我的解决方案中,我有 C++/CLI (vs2012) 项目,它在 C++ (vs2010) 项目中执行一些方法。这是本机代码的签名:
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
怎么会这样?