草庐IT

png_malloc

全部标签

c++ - valgrind 未检测到的 malloc_consolidate (malloc.c) 中的段错误

这个问题在这里已经有了答案:Segfaultsinmalloc()andmalloc_consolidate()(2个回答)关闭6年前。我的程序出现段错误,我找不到原因。最糟糕的是,有问题的函数并不总是导致段错误。GDB确认错误并产生此回溯:ProgramreceivedsignalSIGSEGV,Segmentationfault.0xb7da6d6einmalloc_consolidate(av=)atmalloc.c:51695169malloc.c:Nosuchfileordirectory.inmalloc.c(gdb)bt#00xb7da6d6einmalloc_conso

c++ - 是否使用 new char[] 或 malloc 的结果来转换 float * is IN(严格的别名违规)?

其中哪些代码有UB(具体来说,违反了严格的别名规则)?voida(){std::vectorv(sizeof(float));float*f=reinterpret_cast(v.data());*f=42;}voidb(){char*a=newchar[sizeof(float)];float*f=reinterpret_cast(a);*f=42;}voidc(){char*a=newchar[sizeof(float)];float*f=new(a)float;*f=42;}voidd(){char*a=(char*)malloc(sizeof(float));float*f=r

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++ - new 在堆栈而不是堆上(如 alloca 与 malloc)

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

c++ - 在 C++ (win32) 中将位图转换为内存中的 PNG

我能否仅使用PlatformSDK将内存中的位图转换为PNG(即不写入文件)?(即没有libpng等)。我还希望能够为此图像定义透明颜色(不是Alphachannel)。GdiPlus解决方案似乎仅限于宽度可被4整除的图像。在调用Save()期间,其他任何事情都会失败。有谁知道这个限制的原因以及我如何/是否可以解决它?更新:赏金我正在开始赏金(我真的希望它能够工作)。我实现了GDI+解决方案,但正如我所说,它仅限于四边形宽度的图像。赏金将颁发给能够解决此宽度问题(不更改图像尺寸)或能够提供可行的替代非GDI+解决方案的任何人。 最佳答案

c++ - 为 OpenGL 纹理加载带有 stb_image 的 PNG 会给出错误的颜色

我正在使用stb_image加载一个32位PNG文件(RGBA),并使用它创建一个OpenGL纹理。它适用于24位PNG文件(没有alphachannel),但是当我使用32位PNG文件时,出现问题。纹理应该是这样的:这是使用OpenGL渲染时的样子(黑色部分是透明的,当我启用混合时):这是我加载纹理的方式:intw;inth;intcomp;unsignedchar*image=stbi_load(filename.c_str(),&w,&h,&comp,STBI_rgb);if(image==nullptr)throw(std::string("Failedtoloadtextur

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,