如何删除结构条目并使用 realloc 释放内存
How to delete structure entries and use realloc to free memory
我正在尝试删除结构条目,然后使用 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){
}
}
}
到目前为止,我可以搜索名字和姓氏的匹配项,但不知道如果我移动每个条目会发生什么 "down one." 如果匹配条目是联系人[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));
如果我对计划删除的条目之后的所有条目都执行此操作,它们只是 "overwrite" 我想删除的条目,那么我可以 realloc
缩短结构数组,本质上释放内存?
如果i
是您要删除的条目的索引,您真正需要做的就是:
for (c = i; c < *num_entries - 1; c++)
contacts[c] = contacts[c+1];
然后你可以为较小的动态数组重新分配。可以将结构分配给兼容的结构,因此您无需单独分配结构的字段。
我正在尝试删除结构条目,然后使用 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){
}
}
}
到目前为止,我可以搜索名字和姓氏的匹配项,但不知道如果我移动每个条目会发生什么 "down one." 如果匹配条目是联系人[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));
如果我对计划删除的条目之后的所有条目都执行此操作,它们只是 "overwrite" 我想删除的条目,那么我可以 realloc
缩短结构数组,本质上释放内存?
如果i
是您要删除的条目的索引,您真正需要做的就是:
for (c = i; c < *num_entries - 1; c++)
contacts[c] = contacts[c+1];
然后你可以为较小的动态数组重新分配。可以将结构分配给兼容的结构,因此您无需单独分配结构的字段。