【问题标题】:How to delete structure entries and use realloc to free memory如何删除结构条目并使用 realloc 释放内存
【发布时间】:2016-10-13 18:11:17
【问题描述】:

我正在尝试删除结构条目,然后使用realloc 释放内存。我的结构是

typedef struct person {
    char fname[20];
    char lname[20];
    int number[10];
}person;

我正在使用一个函数来删除输入的条目

void delInfo(int*,person*);

删除功能的工作方式是找到所述条目,然后移回所有记录,然后使用realloc 释放最后一条记录。 到目前为止,它的代码如下所示

void delInfo(int *num_entries,person*contacts){
    char delfirst[20];
    char dellast[20];

    printf("\n First Name: ");
    scanf("%s",delfirst);
    printf(" Last Name: ");
    scanf("%s",dellast);
    int i=0;

    for (i=0; i<*num_entries;i++){
        if (delfirst==contacts[i].fname && dellast==contacts[i].lname){

        }
    }
}

到目前为止,我可以搜索名字和姓氏的匹配项,但不知道如果我将每个条目“向下移动”会发生什么。如果匹配条目是 contacts[i] 之类的

int c;
for (c=i+1;c<*num_entries;c++){
    contacts[i].fname=contacts[c].fname;
    contacts[i].lname=contacts[c].lname;
    contacts[i].number=contacts[c].number;
}
contacts=(person*)realloc(contacts,sizeof(contacts)*(num_entries-1));

如果我在计划删除的条目之后对所有条目执行此操作,它们是否只是“覆盖”我要删除的条目,然后我可以realloc 缩短结构数组并从本质上释放内存?

【问题讨论】:

    标签: c structure realloc


    【解决方案1】:

    如果i 是您要删除的条目的索引,那么您真正需要做的就是:

    for (c = i; c < *num_entries - 1; c++)
        contacts[c] = contacts[c+1];
    

    然后您可以为较小的动态数组重新分配。结构体可以分配给兼容的结构体,因此您不需要单独分配结构体的字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2017-05-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多