3

vcglib について勉強中です ( http://vcg.sf.net )

私の問題は、「ローカル」ウィンドウまたは「自動」ウィンドウで変数を検査しようとすると、次のコードが VS 2013 をクラッシュさせることです。

std::vector<cl_float4> cloud;
std::vector<cl_uchar4> colors;
std::vector<cl_int> valid;

fetchCloud(cloud);
fetchColors(cloud, colors, valid);


class CFace;
class CVertex;
struct MyUsedTypes : public vcg::UsedTypes< 
    vcg::Use<CVertex>       ::AsVertexType,
    vcg::Use<CFace>         ::AsFaceType> {};

/// compositing wanted proprieties
class CVertex : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::Color4b, vcg::vertex::BitFlags> {};
class CFace : public vcg::Face< MyUsedTypes, vcg::face::VertexRef, vcg::face::Normal3f, vcg::face::BitFlags > {};
class CMesh : public vcg::tri::TriMesh< std::vector<CFace>, std::vector<CVertex> > {};

CMesh m;
for (size_t k = 0; k < cloud.size(); ++k) {
    if (valid[k]) {
        vcg::tri::Allocator<CMesh>::AddVertex(m,
                                              CMesh::CoordType(cloud[k].s[0], cloud[k].s[1], cloud[k].s[2]), 
                                              vcg::Color4b(colors[k].s[0], colors[k].s[1], colors[k].s[2], 255)
                                              );
    }
}

cout << "saving to file...";
vcg::tri::io::PlyInfo info;
info.mask |= vcg::tri::io::Mask::IOM_VERTCOLOR;
vcg::tri::io::ExporterPLY<CMesh>::Save(m, (base_name + ".ply").c_str(), false, info);
cout << "saved" << endl;

cloud上記では、50000 から 100000 の要素があります。この点群は、OpenCL を使用して GPU メモリで計算されます。機能fetchCloudし、fetchColorsそれぞれのデータをホスト メモリにダウンロードします。

trimesh_ant_freeglut sampleに付属の から上記のコードをコピーしましたvcglib

また、VS2013 でこのサンプルを正常にコンパイルして実行しました。正常に動作し、いつでもデバッガーで一時停止して、関心のあるすべての変数を調べることができます。

また、サンプルにコードを追加して、1000000 個のランダム ポイントのクラウドを生成しました。デバッガーで実行中のサンプルを一時停止して変数を調べると、 VS2013 に mesh変数が表示されます。

私のソース コードとサンプル コードの両方が、異なるプロジェクトとして同じソリューションに含まれています。ソリューションは CMake を使用して生成されます。プロジェクト間の主な違いは、OpenCL を使用することです。

この問題をデバッグするにはどうすればよいですか? 必要になる可能性がある追加情報を提供する準備ができています。現在、何を提供すればよいかわかりません。

更新:すべての拡張機能を無効にしようとしましたが、まだうまくいきません。

Update2:私のコードをコンパイル、実行、およびデバッグするように同僚に依頼しました - 彼の Visual Studio インストールもクラッシュします。

Update3:ダウンロードされた Visual Studio Update RC2 - 再びクラッシュする

Update4:class CMeshソース ファイル内の関連するコードを移動してみました。結果が不安定です。Visual Studio がクラッシュする場合とクラッシュしない場合があります。コードが の開き括弧の直後にある場合、クラッシュしませんmain。このコードと の間に何らかの指示がある場合int main(int argc, char **argv) {、クラッシュが発生する可能性があります。

このコードがどこかでスタックを破損していると考えるのは正しいですか?

4

1 に答える 1