草庐IT

c++ - 此 C++ 移动构造函数中是否存在内存泄漏?

在StroustrupsTheC++ProgrammingLanguageFourthEdition的第76页上,有一个使用移动构造函数的示例。类定义如下:classVector{private:double∗elem;//elempointstoanarrayofszdoublesintsz;public:Vector(ints):elem{newdouble[s]},sz{s}{for(inti=0;i!=s;++i)elem[i]=0;//initializeelements}~Vector(){delete[]elem;}//destructor:releaseresource

c++ - 运行单元测试时的内存泄漏检测

我有一个带有一套单元测试的Win32C++应用程序。单元测试完成运行后,我希望自动生成关于任何未释放内存的人类可读报告。理想情况下,该报告将有一个堆栈,其中包含每个未释放分配的文件和行号信息。最好以一致的顺序生成它们,以便轻松区分一次运行和下一次运行。(基本上,我想要valgrind--leak-check=full的结果,但在Windows上)。我已经成功地使用UMDH从正在运行的进程中获取此类信息,但该工具似乎只有在您附加到现有进程时才有效。我希望每次运行单元测试时都自动发生这种情况。有没有工具可以做到这一点?如果是这样,我该如何使用它?谢谢! 最佳答案

c++ - 使用 CoCreateInstance 时内存泄漏

我正在使用COM通过C++非托管代码初始化C#.NET类,并且即使在非常基本的程序中我也检测到内存泄漏:int_tmain(intargc,_TCHAR*argv[]){CoInitialize(NULL);ComClass::IClass1*_comClass1;HRESULThr=CoCreateInstance(__uuidof(ComClass::Class1),0,CLSCTX_INPROC_SERVER,__uuidof(ComClass::IClass1),reinterpret_cast(&_comClass1));_comClass1->Release();CoUni

c++ - timer_create 给出内存泄漏问题 "Syscall param timer_create(evp) points to uninitialised byte(s)"

structsigeventtimerEvent;memset(&timerEvent,0,sizeof(timerEvent));timerEvent.sigev_value.sival_int=0;timerEvent.sigev_value.sival_ptr=diaBase;timerEvent.sigev_notify=SIGEV_THREAD;timerEvent._sigev_un._sigev_thread._function=function;timerEvent._sigev_un._sigev_thread._attribute=NULL;timer_ttimer

c++ - 链接 POCO C++ 库会导致大量内存泄漏

我刚刚开始尝试集成PocoC++库与我们的游戏引擎,但是每次我链接/usr/lib/libPocoFoundation.so我的程序突然有51内存泄漏。删除链接选项可以消除所有泄漏(它们都不是来self的代码)。即使我从我的C++文件中删除所有Poco#include,也会发生这种情况。我怀疑Poco的Foundation(核心)方法是否真的存在51次内存泄漏-搜索他们的论坛没有发现任何东西,我相信其他用户会注意到这种明显的东西。我认为我链接到Poco的方式更有可能出现问题?我在Ubuntu11上,使用Code::Blocks作为IDE,使用g++4.5.2构建,并从ubuntuppa

c++ - 尽管使用静态 unique_ptr 进行析构函数调用,但内存泄漏

我使用unique_ptr作为静态数据成员来保存指针。structTest{inti;~Test(){coutte;};unique_ptrS::te=unique_ptr(newTest());在程序终止时S::te被析构,调用测试析构函数。但是_CrtDumpMemoryLeaks向我显示了S::te.get()的内存位置上的内存泄漏,这是指向(已破坏的)测试对象的指针。我不明白这种行为。我不能使用静态unique_ptr吗?为什么在unique_ptr实现中调用了析构函数会出现泄漏? 最佳答案 如果您试图在静态破坏发生之前检查

c++ - if-cases 泄漏中定义的变量? (也就是为什么这甚至可以编译?)

似乎在if语句中声明的变量会泄漏到以下语句?我复制粘贴了一些代码,令我惊讶的是它在不应该编译的时候编译了!我正要提交代码,幸运的是我在那之前发现了错误。下面是一个显示问题的工作(?)程序。以下代码片段调用一个不存在的对象上的函数:#includeclassA{public:virtual~A(){}};classB:publicA{public:voidfooB(){std::cout(a)){b->fooB();}elseif(C*c=dynamic_cast(a)){c->fooC();b->fooB();}return0;}它编译并且输出是这样的:fooCfooB这肯定是错误的。

c++ - std::map 中的 std::string 导致 Valgrind 内存泄漏

这是Valgrind的输出:==6519==at0x4C25885:operatornew(unsignedlong)(vg_replace_malloc.c:319)==6519==by0x4EE65D8:std::string::_Rep::_S_create(unsignedlong,unsignedlong,std::allocatorconst&)(new_allocator.h:104)==6519==by0x4EE7CE0:char*std::string::_S_construct(charconst*,charconst*,std::allocatorconst&,s

c++ - 为什么下面的 C++ 赋值时没有内存泄漏?

以下代码降低了我或多或少了解C++的信念。为什么valgrind在这里没有显示任何内存泄漏?为什么我期望内存泄漏:B比A大:它包含一个额外的成员;所以在分配时应该有类的字段切片。~A()没有虚拟驱动程序。因此,当我们调用deletea时,只应调用~A()并且B中分配的内存将丢失。但我收到dtor的调用顺序是:~A()、~B()、~A()。为什么?!structA{~A(){std::cerrmain():A*a=newA;B*b=newB;*a=*b;deletea;deleteb;更新:我真丢人!当应该调用虚拟dtor时,我通过基类的指针混淆了一个对象的删除。这里只是复制类的内容。谢

c++ - 为什么如果我删除指向基类的指针我会发生内存泄漏?

我有base类和继承base类的类:classbase{};classderived:publicbase{std::stringstr;};我需要使用指向base类的指针来管理一个derived类,但是下面的代码会导致内存泄漏:base*ptr=newderived();deleteptr;我必须转换ptr,还是有更好的选择? 最佳答案 您需要在基类中有一个虚拟析构函数,以便在运行时找到并调用派生类的析构函数。参见thisquestionandanswer了解更多详情。 关于c++-为