我通常用C++编写我的类,并检查它们是否在Linux平台上使用valgrind泄漏内存.在释放所有堆内存之前我不满意.
开始在Qt中编写,我发现valgrind检测到了多少泄漏,也是在一个简单的项目中.它们太多了,很难发现我的同样的泄漏.
我在某个地方读到了可能使用valgrind的抑制文件,这有助于过滤掉不需要的泄漏,但我找不到它.
我使用的是Ubuntu 11.04 x64,g ++ 4.5,Qt 4.7.有人知道如何应对这个问题吗?
我在Visual Studio 2010中有一个非托管的C++项目.它使用boost,glut和供应商提供的另一个库.
我已经设置了项目来创建更多"dll-indepenendent"可执行文件.所有的boost库都是静态链接的,并且在可执行文件所在的目录中不需要dll.
对于Glut来说,我已经链接了静态glut32.lib而不是glut32.dll,并且没有问题.
我已经为运行时库选择了NON-dll版本,即多线程调试(用于调试配置)和多线程用于发布配置.
现在,我之前说过的供应商提供了两个供应商:Vendor.lib和Vendor.dll.
Vendor.lib添加在链接器 - >附加依赖项中但在运行时我总是必须将Vendor.dll放在可执行文件的同一目录中,否则运行时环境会抱怨,因为它找不到Vendor.dll库.
我该如何解决这个问题?我想避免在每个目录中放入.dll文件.
我不想将dll放在exe的同一目录中,一般来说在Visual Studio中部署非托管c ++控制台应用程序的指导原则是什么?
我知道有很多关于这个论点的问题和页面,但这些都没有澄清我的观点.
有些想法?
我最近将我的Qt项目移植qmake到了CMake.我的主程序包含一个取决于#define指令的值.
我想在外部通过指定define指令CMake并构建同一可执行文件的3个不同命名版本.
我该怎么办?
我见过set_target_properties但这只适用于库而不适用于可执行文件.
例如,我想要以下程序,
int main()
{
cout << BUILDTYPE << endl;
}
Run Code Online (Sandbox Code Playgroud)
根据我想要指定的BUILDTYPE "define"
例子,它以3种不同的风格(3个可执行文件)编译CMakeLists.txt
add_executable(myAppV1 -DBUILDTYPE=1)
add_executable(myAppV2 -DBUILDTYPE=2)
add_executable(myAppV3 -DBUILDTYPE=3)
Run Code Online (Sandbox Code Playgroud)
但这不是正确的语法.一些暗示?我得到3个可执行文件打印
我正在使用OpenMP来并行化标量嵌套for循环:
double P[N][N];
double x=0.0,y=0.0;
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
{
P[i][j]=someLongFunction(x,y);
y+=1;
}
x+=1;
}
Run Code Online (Sandbox Code Playgroud)
在这个循环中,重要的是矩阵P在标量和并行版本中必须相同:
我所有可能的试验都没有成功......
我将编写一个KDTree的模板化实现,现在它只能作为四叉树或八叉树用于BarnesHut实现.
这里的关键点是设计,我想指定树被定义为模板参数的维数,然后简单地声明一些常用方法,它们会自动表现出正确的方式(我认为当时需要一些模板专业化).
我想专门化模板,以便有2 ^ 2(四叉树)或2 ^ 3(八叉树)节点.
有人有一些设计理念吗?我想避免继承,因为它限制我做动态内存分配而不是静态分配.
这里N可以是2或3
template<int N>
class NTree
{
public:
NTree<N>( const std::vector<Mass *> &);
~NTree<N>()
{
for (int i=0; i<pow(2,N); i++)
delete nodes[i];
}
private:
void insert<N>( Mass *m );
NTree *nodes[pow(2,N)]; // is it possible in a templatized way?
};
Run Code Online (Sandbox Code Playgroud)
另一个问题是四叉树有4个节点但是2维,八叉树有8个节点,但是3维,即节点数是2^dimension.我可以通过模板元编程指定吗?我想保留4号和8号,这样循环展开器可以更快.
谢谢!
是否可以使用STL算法将std :: map值深度复制到std :: set?
我不想在新集中明确插入.
我不希望明确这样做:
std::map<int, double*> myMap; //filled with something
std::set<double*> mySet;
for (std::map<int, double*>::iterator iter = myMap.begin(); iter!=myMap.end(); ++iter)
{
mySet.insert(iter->second);
}
Run Code Online (Sandbox Code Playgroud)
但是要找到一种更加巧妙和优雅的方式来做到这一点,并带有深刻的价值观.
我想知道如何编写精确的算法来计算参数曲面f : R^2 --> R^3 和三角网格之间交点表面的边界.
我想过第一种方法:
nStepsU = 100
nStepsV = 100
tolerance=0.01 // pick some sensical value
intersectionVertices={}
for u from minU to maxU in nStepsU:
for v from minV to maxV in nStepsV:
for v in verticesInMesh:
if euclidean distance( f(u,v), v ) < tolerance:
add vertex v in a set
connect the vertices in intersectionVertices with a line strip
draw the vertices in intersectionVertices
Run Code Online (Sandbox Code Playgroud)
这个算法非常简单但很慢(n ^ 3)并且没有考虑到网格的地形基于三角形,因此输出点是网格的点而不是利用表面与三角形的交点计算的点并且严重依赖于必须设定的容差.
有人有更好的想法,还是可以为了这个目的把我带到合适的图书馆?
language-agnostic opengl geometry intersection collision-detection
我想知道一个简单的方法来找到一个 boost 多数组的最大/最小元素,一个包含 3 个索引的对象,如下所示:
int iDepth=10,iWidth=10,iHeight=10;
boost::multi_array<GLfloat, 3> image(boost::extents[iDepth][iWidth][iHeight]);
Run Code Online (Sandbox Code Playgroud) 是否可以QGLWidget使用Qt 完全在屏幕外渲染,而无需将场景重新绘制到屏幕上,从而避免完全缓冲区在显示器上翻转?
我需要保存在帧缓冲区上生成的每一帧,但是,由于序列是由4000帧组成的,屏幕上的时间间隔是15ms我花费的,4000*15ms=60s但我需要比60秒快得多(计算不是瓶颈,这里只是更新问题).
可以更快地在帧缓冲区上渲染屏幕吗?我可以在QGLWidget中避免显示器刷新率吗?
如何在没有慢速paintGL()调用的情况下完全渲染帧缓冲区?
我有一组 PIL 图像,其中一些页面正确旋转,而其他页面的旋转接近 180\xc2\xb0。这意味着自动方向检测可能会失败,因为 178\xc2\xb0 度识别为 2\xc2\xb0 度方向。
\n\n不幸的是,Tesseract 有时无法理解 2\xc2\xb0 方向和 178\xc2\xb0 方向之间的差异,因此在后一种情况下,输出是完全错误的。
\n\n一个简单的im.rotate(180)自动修复这个问题,但步骤是手动的,我希望超正方体能够自动理解文本是否颠倒。\n查看一些方法,它们需要霍夫变换来理解文档中的普遍方向。然而,在这种情况下,由于这些扫描文档的特殊方向,它们可能会失败。
有哪些自动轮换选项可用,无需依赖第三方脚本,但仍保留在 Python 库中?
\nc++ ×7
opengl ×2
qt ×2
algorithm ×1
boost ×1
build ×1
c ×1
cmake ×1
copy ×1
deployment ×1
for-loop ×1
framebuffer ×1
geometry ×1
intersection ×1
kdtree ×1
memory-leaks ×1
nested ×1
ocr ×1
octree ×1
off-screen ×1
openmp ×1
quadtree ×1
stdmap ×1
stdset ×1
stl ×1
tesseract ×1
valgrind ×1
visual-c++ ×1