如何解决将 realloc() 分配给不同的指针和将 realloc() 分配给同一个指针有什么区别吗?
我对在 C 中使用动态内存有点陌生,我想知道使用 realloc() 分配给不同的指针和使用 realloc() 分配相同的指针之间是否有任何区别。 例如:
int *ptr = calloc(10,sizeof(int))
ptr=(int*)realloc(ptr,20);
和
*ptr3;
int *ptr = calloc(10,sizeof(int))
ptr3=(int*)realloc(ptr,20);
我已经执行了这两个代码,我发现这两个代码之间没有真正的区别(也没有在 opinter 的值和内存分配之间)。 谢谢。
解决方法
前一种情况是realloc
失败时的区别;在这种情况下,它返回 NULL
,但不会 free
您传递的原始 ptr
。通过直接重新分配 ptr
,您可以保证在 realloc
失败时发生内存泄漏,因为您不再拥有指向 free
的原始指针。
所见的规范/正确用法 here 使用两个指针,一个是持久的,一个是临时的。 realloc
的结果总是放在临时的,所以它可以被检查(和持久指针 free
在失败时)。已知重新分配成功后,临时指针替换持久指针(保证与临时指针相同,或者如果分配无法就地完成,则无效)。
对于第一种情况,如果 realloc
失败,它返回一个 null
指针。
然后,您会将 null
指针分配给 ptr
,从而无法free
ptr
最初指向的内存。
相反,请执行以下操作:
int* p = malloc( 10 * sizeof( int ) );
/* Take note of the memory size I'm requesting in the
realloc call compared to yours. */
int* tmp = NULL;
if ( ( tmp = realloc( p,20 * sizeof( int ) ) ) == NULL ) {
/* We failed to find available memory,but we're
still on the hook for freeing the memory pointed to by p. */
free( p );
return;
}
/* We were successful in either extending the memory pointed to by p
or a new block of memory was allocated for us and the memory pointed to by p
was copied over for us. In either case,you do not have to free p
before assigning tmp to p. */
p = tmp;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。