当前位置:  开发笔记 > 编程语言 > 正文

关于在C++代码中使用realloc实现的问题

如何解决《关于在C++代码中使用realloc实现的问题》经验,为你挑选了2个好方法。

在我们的C++中,Iam目前使用realloc方法来调整malloc分配的内存大小.realloc()的使用如下所示

my_Struct *strPtr =(my_struct*)malloc(sizeof(my_Struct));

/* an later */

strPtr = (my_struct*)realloc(strPtr,sizeof(my_Struct)*NBR);

现在wikipeadia(_http://en.wikipedia.org/wiki/Malloc)说

如果相反的话

void *p = malloc(orig_size);

/* and later... */

p = realloc(p, big_size);

然后,如果不可能获得big_size字节的内存,p将具有值NULL并且我们不再有指向先前为p分配的内存的指针,从而产生内存泄漏

它还说纠正上述错误的正确方法是

void *p = malloc(orig_size);

/* and later... */

void *tmp = realloc(p, big_size); 

if (tmp != NULL)
 {

p = tmp; /* OK, assign new, larger storage to p */

} 

else 

{

/* handle the problem somehow */

}

你能告诉我使用realloc()的最佳方法是什么

一旦我有一个结构的指针,然后在使用realloc后,我可以使用指针到一个空格???

非常感谢



1> unwind..:

当然,你必须防止realloc()返回的情况NULL.这是一个内存分配,并且在C(where realloc())中主要使用,我认为C++程序员认为使用原始realloc()调用它有点低级/ qaint ,内存分配总是会失败.

直接用返回值覆盖指针是一个错误,因为它会丢弃原始指针并在重新分配失败时使内存泄漏.



2> alvatar..:

Malloc()和realloc()是C函数.实际上,realloc()根据您传递的参数执行malloc()和free():

如果你传递一个空指针,realloc会执行malloc所做的事情.

如果你传递零大小,realloc会执行free.

引自这里,你有更深入的解释.

C库使得无法扩展内存块,因此C++也不支持它.

如果你想坚持C函数,那么你应该在调用realloc()时保持第一个内存分配的指针.然后检查它是否为NULL,否则就像在latst代码中那样分配它.

但也许对于C++来说,最好的解决方案是制作自己的mallocator,这是基于C的malloc()的标准解决方案.检查这个,或者这个.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有