在C中重新调整数组大小

时间:2013-11-24 05:49:28

标签: c pointers malloc dynamic-arrays

所以我的教授要求我们阅读和排序一个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; 
   }

1 个答案:

答案 0 :(得分:0)

要调整数组大小,您只需使用realloc函数。如果需要,它会分配一个存储区并将块中的数据复制到新的存储区中。

如果你需要编写这样的函数,你需要分配一个新的内存区域,将数据复制到它,也许使用memcpy函数或simillar并释放旧的内存。