所以我的教授要求我们阅读和排序一个html文件。在这个程序中,我们必须创建一个函数来调整三个数组的大小,使其大小加倍。多次调用此函数。
他在讲座中完成了这个功能,然后我按照他的笔记编写了这个功能。我对发生的事情很困惑。从查看我的代码,不会多次调用读取函数清除临时数组并导致数据丢失和覆盖?我的教授告诉我们使用指针赋值来执行resize函数。
释放数组然后使用
调整大小是否合理(* crn) = (int*)malloc((2*(*size))*sizeof(int));
(* subjects) = (char** )malloc((2*(* size))* sizeof(char*));
(* courses) = (char** )malloc((2*(* size))* sizeof(char*));
然后我应该将数据复制回原始数组,就像我将数据复制到temp中一样吗?
void initialize(int *size, int **crn, char ***subjects, char ***courses)
{
int i;
(*crn) = (int*)malloc((*size)*sizeof(int));
(*subjects) = (char**)malloc((*size)*sizeof(char*));
(*courses) = (char**)malloc((*size)*sizeof(char*));
for(i = 0; i < *size; i++)
{
(*subjects)[i] = (char*)malloc(4*sizeof(char));
(*courses)[i] = (char*)malloc(6*sizeof(char));
}
}
void resize(int *size, int **crn, char ***subjects, char ***courses)
{
int *temp_crn, i;
char **temp_cour, **temp_subjects;
temp_crn = (int *)malloc((2*(*size))*sizeof(int));
temp_cour =(char**)malloc((2*(*size))*sizeof(char*));
temp_subjects = (char**)malloc((2*(*size))*sizeof(char*));
for(i = 0; i < 2*(*size); i++)
{
temp_subjects[i] = (char*)malloc(4*sizeof(char));
temp_cour[i] = (char*malloc(6*sizeof(char));
}
for(i = 0; i < *size; i++)
temp_crn[i] = (*crn)[i];
for(i = 0; i < *size; i++)
temp_subjects[i] = (*subjects)[i];
temp_cour[i] = (*courses)[i];
free(*crn);
free(*subjects);
free(*courses);
*crn = temp_crns;
*subjects = temp_subjects;
*courses = temp_cour;
for(i = *size; i < (2*(*size)); i++)
(*subjects)[i] = (char*)malloc(4*sizeof(char));
(*courses)[i] = (char*)malloc(6*sizeof(char));
*size = *size * 2;
}
答案 0 :(得分:0)
要调整数组大小,您只需使用realloc
函数。如果需要,它会分配一个存储区并将块中的数据复制到新的存储区中。
如果你需要编写这样的函数,你需要分配一个新的内存区域,将数据复制到它,也许使用memcpy函数或simillar并释放旧的内存。