我现在正在学习vcglib (http://vcg.sf.net)
我的问题是,当我试图检查“局部变量”或“自动”窗口中的变量时,下面的代码会崩溃。
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个元素。这个点云是在GPU内存中使用OpenCL计算的。函数fetchCloud和fetchColors将各自的数据下载到主机内存中。
我已经从trimesh_ant_freeglut sample复制了上面的代码,该代码与vcglib一起提供。
我还成功地在VS2013中编译和运行了这个示例。它运行良好,我可以随时在调试器中暂停它,并检查所有感兴趣的变量。
我还向示例中添加了一个代码,生成了1000000个随机点的云。当我在调试器中暂停运行的示例并检查变量时,VS2013将显示mesh变量。
我的源代码和示例代码都包含在与不同项目相同的解决方案中。解决方案是使用CMake生成的。项目之间的主要区别是使用OpenCL。
如何调试此问题?我准备提供更多的信息,这可能是必要的。我只是不知道目前我应该提供什么。
更新:尝试禁用所有扩展-仍然没有成功。
Update2:要求同事编译、运行和调试我的代码--他的Visual安装也会崩溃。
Update3:下载Visual更新RC2 -再次崩溃
Update4:尝试移动源文件中与class CMesh相关的代码。结果不稳定。Visual有时会崩溃,有时不会崩溃。如果代码就在main开头的括号之后,则不会崩溃。如果在此代码和int main(int argc, char **argv) {之间出现一些指令,则可能会发生崩溃。
我认为这段代码在某个地方破坏了堆栈,对吗?
发布于 2014-04-29 08:10:35
解决了!通过将类声明移出main()
那是
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> > {};
int main (int argc, char* argv[])
{
// blah-blah-blah
CMesh m;
// fill m
}现在不要撞车了!
https://stackoverflow.com/questions/23274334
复制相似问题