草庐IT

c++ - 是否有可能 malloc() 分配的缓冲区与使用 mmap() 分配的另一个缓冲区重叠?

我打算使用mmap()来分配一个靠近特定地址的缓冲区。我担心的是,使用mmap()分配的缓冲区将与malloc()或new运算符(C++)分配的其他缓冲区重叠。可能吗? 最佳答案 如果您使用MAP_FIXED要求mmap在特定地址创建映射,那么是的,有可能您会覆盖现有映射例如malloc分配的空间,共享库代码或数据部分的一部分等。基本上使用MAP_FIXED总是错误的,除非你已经获得了地址范围通过调用mmap而不指定MAP_FIXED(所以你知道它属于你);在这种情况下,您可以使用MAP_FIXED有意覆盖部分映射。其他答案似乎都忽

c++ - 将 malloc 更改为新的运算符

我正在将路径规划代码从C更改为C++。代码动态分配map中的状态。new和malloc的区别我不是很清楚。以下代码片段出现错误。typedefstructcell{intx,y;structcell*n[5];}cell_t;typedefstructpq{cell_t**heap;intlen,cap;}pq_t;//forCversionfunc(pq_t*pq,50){pq->heap=malloc(sizeof(cell)*50);pq->len=0;pq->cap=0;}//forC++versionfunc(pq_t*pq,50){pq->heap=(cell_t*)::o

c++ - 不使用 malloc 是否有可能造成内存泄漏?

本题如题:是否可以在不使用任何内核特定方法(如malloc、new等)的情况下产生内存泄漏?如果我将在一个包含很多元素的函数中创建一个链接列表,然后我将退出该函数而不清理列表,该怎么办?该列表将在不使用任何malloc调用的情况下创建,即structlist_head{structlist_head*next,*prev;}能保证退出这个函数后所有资源都被释放吗?所以我可以自由执行一百万次而不会泄露任何内容?主题:如果您不使用任何特定的malloc或new调用,您将不会发生堆内存泄漏。绝不。那正确吗? 最佳答案 泄漏总是与资源相关联

c++ - 如果我将 free 与 new 一起使用或将 delete 与 malloc 一起使用,结果会怎样?

是编译错误还是运行时错误?下面的代码可以编译!classBase{voidg();voidh();};intmain(){Base*p=newBase();free(p);return0;}但是,如果我这样声明类Base,它就不能用虚函数编译了classBase{virtualvoidg();voidh();};无论函数是否为虚函数,下面的代码都可以一直编译。classBase{voidg();voidh();};intmain(){Base*p=(Base*)malloc(sizeof(Base));deletep;return0;} 最佳答案

c++ - 一些内存似乎在 malloc() 和 free() 之后分配

我是C的新手。我正在尝试熟悉malloc+free。我已经编写了以下测试代码,但由于某种原因,内存没有完全释放(顶部仍然指示分配给进程的大约150MB内存)。这是为什么?#include#includetypedefstruct{char*inner;}structure;intmain(){inti;structure**structureArray;structureArray=(structure**)malloc(sizeof(structure*)*1000*10000);for(i=0;iinner=(char*)malloc(sizeof(char)*1000*1000*

C++:malloc:错误:从 ‘void*’ 到 ‘uint8_t*’ 的无效转换

我遇到了这个问题:invalidconversionfrom‘void*’to‘uint8_t*’执行此操作时:intnumBytes;uint8_t*buffer;buffer=malloc(numBytes);//errorhere,why?还是我必须这样说?buffer=malloc(numBytes);请解释一下。 最佳答案 您不能在C++中从void*隐式转换(在这方面与C不同)。你可以这样做:buffer=static_cast(malloc(numBytes));但实际上,您应该只使用new/delete而不是mall

c++ - 使用 malloc() 和 sizeof() 在堆上创建结构

我正在尝试使用malloc()和sizeof()在堆上创建一个结构。这是我的代码:#include#include#includestructEmployee{charfirst[21];charlast[21];chartitle[21];intsalary;};structEmployee*createEmployee(char*first,char*last,char*title,intsalary)//CreatesastructEmployeeobjectontheheap.{structEmployee*p=malloc(sizeof(structEmployee));if

c++ - 使用malloc代替new,创建对象时调用拷贝构造函数

我想试用TBB的scalable_allocator,但是当我不得不替换我的一些代码时感到困惑。这是使用分配器完成分配的方式:SomeClass*s=scalable_allocator().allocate(sizeof(SomeClass));编辑:上面显示的不是使用scalable_allocator完成分配的方式。作为ymettcorrectlymentioned,分配是这样完成的:intnumberOfObjectsToAllocateFor=1;SomeClass*s=scalable_allocator().allocate(numberOfObjectsToAlloca

c++ - 如何检查 malloc() 实现中返回数据的对齐?

malloc(sz)返回对齐适用于任何对象的内存。在32位x86机器上,这意味着malloc()返回的地址值必须能被4整除。但实际上,32位malloc实现返回8字节对齐的内存,这意味着返回的地址总是可以被8整除。你也应该这样做。(在x86-64/IA-64机器上,最大数据对齐为8,但malloc实现返回16字节对齐的内存。)我有一个针对这种情况的测试//Checkalignmentofreturneddata.intmain(){double*ptr=(double*)malloc(sizeof(double));assert((uintptr_t)ptr%__alignof__(d

c++ - 如何迭代所有 malloc block (glibc)

我正在尝试迭代所有领域中的所有malloc_chunk。(基于核心文件调试,内存泄漏和内存损坏排查)据我所知,每个竞技场都有top_chunk,它指向一个竞技场内的顶部block,基于top_chunk,其中有prev_size和size,基于代码(glibc/malloc/malloc.c):我可以获取之前的连续block,然后在一个竞技场中循环所有block。(我可以统计block的大小和数量,就像WinDBG一样:!heap-stat-h)并且还基于prev_size和size,我可以检查block是否损坏。arena(malloc_state)中有一个成员变量:next,指向下