jjzjj

c++ - 检查是否可以释放指针

我找遍了这个问题的答案,但似乎找不到。(我对C++的经验相当有限)在我的库中,我释放了一个字符串。(太棒了,是吧?)这就是问题所在。我有一个包含char*的结构,它可能分配在堆上,也可能不分配。虽然它是一个有效的指针,但它不能被释放。浏览器char*s1="AString";char*s2=(char*)memcpy(malloc(9),s1,9);free(s2);free(s1);将导致“free(s1);”错误(正如它应该)因为s1实际上并不需要被释放,(它不在堆上)我怎样才能以“可接受”的方式处理这个问题?(在类似的主题上,“让它崩溃”的答案在我看来并不合理)因为结构不是由库单

c++ - 'delete pointer' 仅仅意味着 '*pointer = 0' 吗?

#includeintmain(){usingstd::cout;int*p=newint;*p=10;cout输出:100x237c01000x237c010这里删除p后,为什么指针p还保留着它的值呢?不删除释放指针p?“释放指针”到底是什么意思?“删除p”是否只是意味着“*p=0”?(从输出看来) 最佳答案 Hereafterdeletingp,whythepointerpretainsitsvalue?这就是语言的设计方式。如果你想让你持有的指针归零,你需要自己将它归零。指针p是另一block内存,与它指向的分配/对象分开。D

c++ - 释放内存时堆损坏

我有一个类如下structCliHandler{CliHandler(intargc,char**argv);~CliHandler();intdoWork();intargc_;char**argv_;private:CliHandler(constCliHandler&){}CliHandler&operator=(constCliHandler&){}};//构造函数CliHandler::CliHandler(intargc,char**argv){//setcommandlineparametersargc_=argc;argv_=(char**)malloc(argc_*s

c++ - is_lock_free 未在 gcc 4.7.2 的 std::atomic<T> 中定义?

我遇到这个编译器错误functionstd::atomic::is_lock_free()const:error:undefinedreferenceto'__atomic_is_lock_free'whencompilingcodelikebelowusinggcc4.7.2onlinux.structS{inta;intb;};std::atomics;cout 最佳答案 AtomicAPIisn'tcompleteinGCC4.7:Whenlockfreeinstructionsarenotavailable(eitherth

c++ - C++ : why does free not accept a const void*, 中的 malloc/free 有更好的方法吗?

这个问题在这里已经有了答案:UnabletofreeconstpointersinC(12个答案)关闭8年前。将C++11代码连接到某些C回调,我必须传递constchar*const*,即字符串数组。这是我的代码的简化版本:intmain(int,char**){constintcnt=10;constchar*const*names=static_cast(malloc(sizeof(char*)*cnt));//...allocatingnames[0],etc.comingsoon...the_c_function(names);free(names);return0;}所以我

c++ - cv::Mat的释放方法

我想确认cv::Mat::release()方法是否类似于C编程中的free(),即它释放Matrix数据来自内存。特别是,我想了解此方法在内存泄漏方面的行为,并确保在可能的程序中没有泄漏。 最佳答案 如果引用计数器等于一,那么是的,cv::Mat::release()会将其递减为零并释放结构(如C中的free)。如果引用计数器大于1(即有其他对象对该结构感兴趣),则cv::Mat::release()将仅递减引用计数器。您可以增加cv::Mat的引用计数器通过调用cv::Mat::addref()结构(即标记您对它感兴趣并且不希望

c++ - 当我们有 new/delete 时,为什么要使用 malloc/free?

当我们在C++中有new和delete时,malloc和free有什么用。我想free和delete的功能是一样的。 最佳答案 它们不一样。new调用构造函数,malloc只是分配内存。此外,它是未定义的行为将两者混合(即使用new与free和malloc与删除).在C++中,你应该使用new和delete,malloc和free是为了与C的兼容性原因。 关于c++-当我们有new/delete时,为什么要使用malloc/free?,我们在StackOverflow上找到一个类似的问题

c++ - 如何在 C++ 中释放静态成员变量?

谁能解释一下如何释放静态成员变量的内存?以我的理解,只有在该类的所有实例都被销毁后才能释放它。此时我有点无助...一些代码来解释它:classball{private:staticSDL_Surface*ball_image;};//FIXME:howtofreestaticVariable?SDL_Surface*ball::ball_image=SDL_LoadBMP("ball.bmp"); 最佳答案 指针本身将一直存在,直到程序关闭。然而,它指向的是公平游戏。您可以随时释放它。如果您担心的是内存泄漏,那么您有几个我看到的选项

c++ - 如果使用 delete 而不是 free 删除使用 malloc 分配的内存怎么办

我遇到了一个我无法解决的问题。我的问题是,如果我使用malloc分配内存,然后使用delete删除内存块?一般的经验法则是Ifweallocatememoryusingmalloc,itshouldbedeletedusingfree.Ifweallocatememoryusingnew,itshouldbedeletedusingdelete.现在,为了检查如果我们反过来会发生什么,我写了一个小代码。#include#include#includeusingnamespacestd;classA{intp=10;public:intlol(){returnp;}};intmain()

C++ 局部变量和寄存器

我经常看到编译器将局部函数变量放在寄存器中。我对此有疑问。如果我大量使用某些类成员变量(整数/指针等...),将其临时复制到局部变量,使用它,然后将结果复制到类成员是否有意义?例如(单向填充ptr列表):structMyClass{structObjectHolder{ObjectHolder*next_free;};ObjectHolder*next_free=nullptr;voidfill(){ObjectHolder*copy_of_free=next_free;//copytoregister?for(inti=0;i 最佳答案