【问题标题】:how to free malloc inside failed realloc如何在失败的 realloc 中释放 malloc
【发布时间】:2017-02-06 23:41:15
【问题描述】:

我有这个结构:

typedef struct person_st{
   char *first_name, *last_name;
   int id;
   Date birthday;  
}*pPerson, Person;

可以说我重新分配sizeof(Person)*(++n) 几次。 在每个结构中,我还为first_name 和last_name 分配空间。

假设在我使用realloc 时会出现分配失败,那么处理所有first_name 和last_name 分配的最安全/最智能的方法是什么?在 Person 结构重新分配失败后,还有办法释放它们吗?

谢谢。

【问题讨论】:

    标签: c struct malloc


    【解决方案1】:

    调用 realloc 的最佳方式是这样的:

    more_people = realloc(people, count * sizeof(Person));
    if (!more_people) {
        // handle failure
    } else {
        people = more_people;
    }
    

    这样你检查 realloc 的返回码并安全地处理失败

    【讨论】:

      【解决方案2】:

      失败的 realloc 不会干扰原始数据,因此您仍然可以引用旧数据(始终假设您保留旧指针,因为失败的 realloc 将返回 null)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-16
        • 1970-01-01
        • 2010-12-09
        • 2021-12-29
        • 2014-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多