草庐IT

malloc_info

全部标签

c++ - 为什么当内存足够时 malloc() 会失败?

我正在使用具有128GB内存的服务器进行一些计算。我需要malloc()一个大小为56120*56120的2Dfloat组。示例代码如下:intmain(intargc,charconst*argv[]){float*ls;intnum=56120,i,j;ls=(float*)malloc((num*num)*sizeof(float));if(ls==NULL){cout代码编译成功,但是当我运行它时,它显示“mallocfailed!!!”。正如我计算的那样,保存整个数组只需要大约11GB的内存。在开始编写代码之前,我检查了服务器,发现有110GB可用内存。为什么会出现错误?我还

c++ - malloc: *** 对象错误:未分配被释放的指针 *** 在 malloc_error_break 中设置断点以进行调试

谁能帮我弄清楚我在哪里得到了这个错误。我知道这可能是双重删除或类似的东西。作为背景,这是一个霍夫曼树的实现,您可以在wikipedia上轻松实现。.CharCountNodeclassimplementationintmain(){ifstreaminput;input.open("input.txt");MinPriorityQueueheap;mapm;while(input.good())m[input.get()]+=1;for(map::const_iteratorit=m.begin();it!=m.end();++it)heap.enqueue(CharCountNode

c++ - 如果使用 delete 释放使用 malloc() 获得的内存,是否应该产生警告甚至断言失败?

在C++中,使用delete来释放通过malloc()获得的内存并不一定会导致程序崩溃。如果使用delete来释放使用malloc()获得的内存,是否应该产生警告甚至断言失败?为什么Stroustrup在C++上没有这个功能? 最佳答案 InC++usingdeletetofreememoryobtainedwithmalloc()doesn'tnecessarilycauseaprogramtoblowup.不,但它必然会导致未定义的行为,这意味着任何事情都可能发生,包括程序崩溃或程序继续以看似正确的方式运行。Doyouguyst

c++ - 使用 operator new/malloc 分配的内存块能否在程序执行结束后持续存在?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhenyouexitaCapplication,isthemalloc-edmemoryautomaticallyfreed?当我阅读有关在C/C++中的动态内存分配方面分别使用delete/free的强制性时,我想到了这个问题。我想如果内存分配在我的程序执行终止之后仍然存在,那么是的,它是强制性的;否则,我为什么要担心释放分配的空间?操作系统不会在进程终止时自动释放它吗?我有多正确?我的问题是可以int*ip=newint(8);在我的程序终止后仍然存在? 最佳答案

c++ - `type_info::before` 有什么用?

根据cplusplus.com,std::type_info::before()函数...Returnstrueifthetypeprecedesthetypeofrhsinthecollationorder.Thecollationorderisjustaninternalorderkeptbyaparticularimplementationandisnotnecessarilyrelatedtoinheritancerelationsordeclaringorder.那么它有什么用呢? 最佳答案 考虑你想把你的type_inf

c++ - new 在堆栈而不是堆上(如 alloca 与 malloc)

有没有办法使用new关键字在堆栈上分配(alaalloca)而不是堆上(malloc)?我知道我可以自己破解,但我不想这样做。 最佳答案 要在堆栈上分配,要么将你的对象声明为局部变量按值,或者你可以实际使用alloca获取指针,然后使用就地new运算符:void*p=alloca(sizeof(Whatever));new(p)Whatever(constructorArguments);但是,虽然使用alloca和in-placenew可确保在返回时释放内存,但您放弃了自动析构函数调用。如果您只是想确保在退出范围时释放内存,请考虑

c++ - 为什么 std::type_info 是多态的?

std::type_info被指定为多态有什么原因吗?析构函数被指定为虚拟的(并且在C++的设计和演进中对“使其具有多态性”的效果进行了注释)。我真的看不出一个令人信服的理由。我没有任何具体的用例,我只是想知道它背后是否有任何理由或故事。以下是我提出并拒绝的一些想法:这是一个可扩展点-实现可能会定义子类,然后程序可能会尝试将dynamic_cast一个std::type_info到另一个实现定义的派生类型。这可能是原因,但实现添加一个实现定义的成员似乎同样容易,这可能是虚拟的。无论如何,希望测试这些扩展的程序必然是不可移植的。这是为了确保在delete基指针时正确销毁派生类型。但是没有

c++ - 带有对 type_info 的引用的 std::common_type

我很困惑:升级到GCC6(RC1)后,一些使用std::common_type的模板代码在失败之前有效。我尝试了clang,但也失败了......所以我一定做错了什么!代码相当于:#include#includeusingnamespacestd;//common_typeoftwoconsttype_info&isok(compilesok)common_type::typefunc1();//common_typeofthreetype_info&isbad...(failstocompile)common_type::typefunc2();//common_typeoftwoc

c++ - 是否有用于标准化类型名称字符串格式的 C++ type_info 的可移植包装器?

type_info::name()的输出格式是特定于实现的。namespaceN{structA;}constN::A*a;typeid(a).name();//returnse.g."conststructN::A"butcompiler-specific有没有人编写过一个包装器,它返回可靠的、可预测的类型信息,这些信息在编译器中是相同的。多个模板化函数将允许用户获取有关类型的特定信息。所以我也许可以使用:MyTypeInfo::name(a);//returns"conststructN::A*"MyTypeInfo::base(a);//returns"A"MyTypeInfo:

c++ - 是否可以将 C++ 智能指针与 C 的 malloc 一起使用?

我的一些代码仍然使用malloc而不是new。原因是我害怕使用new因为它会抛出异常,而不是返回NULL,我可以轻松检查它。将每个对new的调用包装在try{}catch(){}中也看起来不太好。而当使用malloc我可以只做if(!new_mem){/*handleerror*/}.因此我有一个问题。我可以将智能指针与malloc一起使用吗?类似:SmartPointersmarty=malloc(sizeof(Type));类似的东西。这可能吗?谢谢,博达·赛多。 最佳答案 如果您使用shared_ptr或unique_ptr,