待办事项列表,C中的重新分配

时间:2015-01-31 01:01:42

标签: c arrays string realloc

我正在为Computing II做一份家庭作业。它是在一个动态创建的字符串数组中创建一个待办事项列表,可以通过多种方式进行操作。需要操作的方法之一是通过使用realloc添加任务或数组元素。我的代码如下所示,直到我在另一个函数中调用new realloc'd数组时才会运行。

void add_task(char **List, int line_num){
   char task[1000];

   List = (char**)realloc(List, (line_num+1)*sizeof(char));
   List[line_num] = malloc((1000) * sizeof(char));

   printf("Please enter the string you would like to use as your new task.\n");
   scanf("%s",task);
   strcat(task,"\n");
   strcpy(List[line_num],task);
   return;  
}

1 个答案:

答案 0 :(得分:1)

您的realloc()来电错误,您提供的错误尺寸。由于Listchar**,因此元素为char*,而非char

List = realloc(List, (line_num+1)*sizeof(char*));

由于sizeof(char*)可能是4,因此您只需要分配1/4的空间。然后你在这个数组的边界之外写字,导致未定义的行为。

一般情况下,只要您使用<something>*malloc分配给reallocsizeof的参数应为<something>,即从类型中删除最后一个*