草庐IT

reallocate

全部标签

c - realloc() 在 Windows 7 中成功但在 Windows XP 中失败,为什么?

所以我的这段代码有以下reallocblock:char**ptr=NULL;voidrealloc_ptr(unsignedintnew_size){void*temp=NULL;temp=realloc(ptr,new_size*sizeof(*ptr));if(temp!=NULL){ptr=temp;}else{exit(EXIT_FAILURE);}}new_size在调用此函数之前递增。这个数组总是只展开。此外,new_size在我的代码中从未超过3(目前)。现在上面的realloc调用在我在Windows7中测试时工作正常。当我在XP中测试这段代码时,上面的代码会成功3次

c++ - 当内存可用时,realloc() 返回 NULL

我有一个c++程序在具有12GB内存的Windows7机器上运行。编译器和链接器是VisualStudio2013Express。该程序使用OGDF库。我将库源代码编译成具有ReleaseX64配置的静态库,并在我的项目中引用了该库。当我运行问题(调试x64配置)时,OGDF库中的代码抛出异常,指示没有足够的可用内存;E*p=static_cast(realloc(m_pStart,sNew*sizeof(E)));if(p==0)OGDF_THROW(InsufficientMemoryException);我暂停程序并打开调试窗口并检查了sNew=9M和sizeof(E)=8的值,

c++ - 为什么在大多数平台上没有 'aligned_realloc'?

MSVC有自己的非标准函数_aligned_malloc,_aligned_realloc和_aligned_free.C++17和C11引入了(std::)aligned_alloc,结果可以用free来取消分配或realloc.但是realloc不能用于实际重新分配aligned_alloc返回的内存,因为它不采用对齐参数,因此不能保证返回的指针将正确对齐。我什至找不到任何可以在MicrosoftWindows/VisualC++以外的平台上重新分配对齐内存(保持对齐)的非标准扩展。我是不是找错了,还是确实没有_aligned_reallocPOSIX和其他平台上的替代方案?如果是

c++ - 如果缩小分配的内存大小,还要检查 realloc() 吗?

当您调用realloc()时,您应该在将返回的指针分配给作为参数传递给函数的指针之前检查函数是否失败...我一直遵守这条规则。当您确定内存将被截断而不是增加时,是否有必要遵循此规则?我从未见过它失败。只是想知道我是否可以保存一些说明。 最佳答案 realloc可以自行决定将block复制到新地址,而不管新大小是更大还是更小。如果malloc实现需要新分配以“缩小”内存块(例如,如果新大小需要将内存块放在不同的分配池中),这可能是必要的。这在glibcdocumentation中有说明。:Inseveralallocationimpl

c++ - 将指向堆栈变量的指针传递给 realloc() 是否有效?

intmain(){charmyString=NULL;realloc(&myString,5);strncpy((char*)&myString,"test",5);}似乎工作正常,但我仍然对堆栈和堆有点困惑。这是允许的吗?如果允许的话,myString是需要手动释放还是超出作用域就释放?编辑:感谢您的回复,所以我认为这同样是非法的//IwantthecodetochangemyStringto"tests"charmyString[5]="test";realloc(&myString,strlen(myString)+2);myString[4]='s';myString[5]=

c++ - 总是推荐 std::vector 而不是 realloc 公平吗?

来自BjarneStroustrup'sFAQ:Ifyoufeeltheneedforrealloc()-andmanydo-thenconsiderusingastandardlibraryvector.我会通过同意std::vector更好来作为我的问题的开头,原因有很多,而且我个人总是会选择使用它而不是使用C内存分配编写我自己的动态数组。但是,std::vector会在内存增长时产生碎片,因为C++没有等效的realloc(编辑澄清一下,我知道std::vector的存储是连续的,不会碎片化,我的意思是分配和解除分配导致的内存空间碎片,realloc可以通过扩展现有分配来避免)。

c++ - std::vector 的性能差是因为没有调用 realloc 的对数次数吗?

编辑:我又添加了两个基准测试,以比较realloc与C数组的使用以及reserve()与std::vector的使用。从最后的分析来看,realloc的影响似乎很大,即使只调用了30次。检查文档我猜这是因为realloc可以返回一个全新的指针,复制旧指针。为了完成这个场景,我还添加了用于在初始化期间完全分配数组的代码和图表。与reserve()的区别是显而易见的。编译标志:仅图中描述的优化,使用g++编译,仅此而已。原始问题:我对std::vector与新建/删除数组进行了基准测试,当我添加10亿个整数时,第二个代码比使用vector的代码快得多,尤其是在优化的情况下开启。我怀疑这是v

c++ - C++ 中的 Realloc 等价物

是的,另一个realloc与std::vector的问题。我知道你要说什么,我同意,忘记手动内存分配,只使用std::vector。不幸的是,我的教授禁止我在这项作业中使用STL中的任何内容。是的,我有一个T的动态数组,我需要它可以调整大小,但我不能使用std::vector。我可以回到黑暗时代并使用malloc和family完成所有事情,但如果我可以使用new那就太棒了。我读过很多帖子,每个人都说“不,你不能这样做,使用std::vector”,但它们都是在2011年8月之前发布的,我希望自从C++11出现以来,某些事情可能会有所改变。那么告诉我,我是走运了,还是必须恢复到C风格的内

阀门错误。在功能中使用malloc和realloc

我正在尝试使mystrcat的功能正常工作。它似乎可以返回正确的字符串,但Valgrind会在我的代码上出现错误,但我似乎无法修复。char*mystrcat(char*dest,constchar*src){intlen=strlen(dest)*2;char*origdest=realloc(dest,len);while(*dest){dest++;}while(*src){*dest++=*src++;}returnorigdest;}intmain(void){char*str=malloc(7);strcpy(str,"First");str=mystrcat(str,"Secon

动态内存分配(malloc和free​、calloc和realloc​)

目录一、为什么要有动态内存分配​二、C/C++中程序内存区域划分​三、malloc和free​2.1、malloc2.2、free​四、calloc和realloc​3.1、calloc​3.2、realloc​3.3realloc在调整内存空间的是存在两种情况: 3.4realloc有malloc的功能五、常见的动态内存的错误​5.1对NULL指针的解引用操作​5.2对动态开辟空间的越界访问​5.3对非动态:开辟内存使用free释放​5.4使用free释放一块动态开辟内存的一部分​5.5对同一块动态内存多次释放5.6动态开辟内存忘记释放(内存泄漏)忘记释放不再使用的动态开辟的空间会造成内存泄