所以我用malloc()分配了一block内存,后来用realloc()进行了更改。在我的代码中的某个时刻,我想清空它,我的意思是本质上给它的内存为0。这可以直观地使用realloc(pointer,0)完成。我在这里读到这是实现定义的,不应使用。我应该改用free(),然后再做一个malloc()? 最佳答案 这取决于你的意思:如果你想清空已使用的内存,但仍然可以访问该内存,那么你使用memset(pointer,0,mem_size);,将所述内存重新初始化为零。如果您不再需要该内存,则只需调用free(pointer);,这将
用于标准分配器接口(interface),例如std::vector,是否支持重新分配?我有一个相当具体的用例,其中能够realloc直接比分配、移动和释放效率更高。编辑:对不起-我绝对无意调用实际realloc,我的意思是具有这些语义的函数。实际上,我在后台分配了一个堆栈,如果我从堆栈分配更多,那么我就无法释放它下面的内存,这完全是浪费,因为无论如何都不需要再次分配,因为有很多可用的连续可用空间。因此,如果我可以被要求在一个步骤中重新分配,那么我可以避免首先分配一些东西并浪费一些内存,然后移动vector的所有内容。. 最佳答案
在C中我们使用malloc(),free(),但在C++中你使用new,delete,但在C中我们也有realloc,它将分配新数据block并复制旧数据(常见的最小值),然后释放旧数据block。那么它的C++版本是什么?我当然可以自己写,但是有内置的东西吗?main(){inti;char*x=malloc(3);x[0]=10;x[1]=20;x[2]=30;realloc(x,4);x[3]=40;for(i=0;i 最佳答案 在C++中没有与realloc等效的new/delete。来自BjarneStroustrup's
如何在C++中realloc?语言中似乎缺少它-有new和delete但没有resize!我需要它,因为当我的程序读取更多数据时,我需要重新分配缓冲区来保存它。我不认为delete旧指针和new新的更大的指针是正确的选择。 最佳答案 使用::std::vector!Type*t=(Type*)malloc(sizeof(Type)*n)memset(t,0,sizeof(Type)*m)变成::std::vectort(n,0);然后t=(Type*)realloc(t,sizeof(Type)*n2);变成t.resize(n2)
我正在将一个项目移植到iPhone,它使用了未找到的realloc和memcpy。要包含的标题是什么?这是一个混合了ObjectiveC和C++的项目,我开始迷路了。提前感谢您的帮助! 最佳答案 在C中:#include//memcpy#include//realloc在C++中,删除.h和前缀为c。在C++中,它们将被放置在std命名空间中,但也是全局的。 关于c++-我应该为memcpy和realloc包含什么标题?,我们在StackOverflow上找到一个类似的问题:
我正在将一个项目移植到iPhone,它使用了未找到的realloc和memcpy。要包含的标题是什么?这是一个混合了ObjectiveC和C++的项目,我开始迷路了。提前感谢您的帮助! 最佳答案 在C中:#include//memcpy#include//realloc在C++中,删除.h和前缀为c。在C++中,它们将被放置在std命名空间中,但也是全局的。 关于c++-我应该为memcpy和realloc包含什么标题?,我们在StackOverflow上找到一个类似的问题:
一个differentquestion启发了以下想法:std::vector有在增加容量时移动所有元素吗?据我了解,标准行为是底层分配器请求新大小的整个block,然后移动所有旧元素,然后销毁旧元素,然后释放旧内存。考虑到标准分配器接口(interface),这种行为似乎是唯一可能的正确解决方案。但我想知道,修改分配器以提供一个reallocate(std::size_t)函数是否有意义,该函数将返回一个pair并且可以映射到底层的realloc()?这样做的好处是,如果操作系统实际上可以扩展分配的内存,那么根本不需要移动。bool值将指示内存是否已移动。(std::realloc()
一个differentquestion启发了以下想法:std::vector有在增加容量时移动所有元素吗?据我了解,标准行为是底层分配器请求新大小的整个block,然后移动所有旧元素,然后销毁旧元素,然后释放旧内存。考虑到标准分配器接口(interface),这种行为似乎是唯一可能的正确解决方案。但我想知道,修改分配器以提供一个reallocate(std::size_t)函数是否有意义,该函数将返回一个pair并且可以映射到底层的realloc()?这样做的好处是,如果操作系统实际上可以扩展分配的内存,那么根本不需要移动。bool值将指示内存是否已移动。(std::realloc()