此问题已在此处有答案:
Proper usage of realloc()(6个答案)
3天前关闭。
我有下面这行代码,哪个代码段正确使用了realloc?
我怀疑 *delete_choices行中的realloc调用使用错误,这是正确的吗?
*delete_choices = (char*)malloc(files_max);
if (files_size >= files_max)
{
files_max *= 2;
files = (struct dirent*)realloc(files, sizeof(struct dirent) * files_max);
*delete_choices = (char*)realloc(delete_choices, files_max);
}
这是正确的用法吗?
*delete_choices = (char*)realloc(*delete_choices, files_max);
真的很困惑
2条答案
按热度按时间jm81lzqq1#
正确的表达是:
此外,上面的代码片段可能会引发未定义的行为,因为如果
realloc()
失败并返回NULL
指针,您将无法访问通过malloc()
分配的原始内存(假设malloc()
成功),并泄漏内存。解决方案:
使用临时指针存储
realloc()
的返回值:注意:不要强制转换
malloc()
和family的返回值。这些函数返回一个泛型void *
,它被隐式转换为任何其他指针类型。强制转换是多余的,只会使代码变得混乱。ttisahbt2#
*delete_choices = (char*)realloc( *delete_choices, files_max );
是正确的用法。传递的类型必须等于返回的类型。
在你的例子中,
delete_choices
看起来是char**
类型,因此*delete_choices
是char*
类型,所以这两个类型不相等。一般情况下:
t = (T)realloc( t, n );