我正在为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;
}
答案 0 :(得分:1)
您的realloc()
来电错误,您提供的错误尺寸。由于List
为char**
,因此元素为char*
,而非char
。
List = realloc(List, (line_num+1)*sizeof(char*));
由于sizeof(char*)
可能是4
,因此您只需要分配1/4的空间。然后你在这个数组的边界之外写字,导致未定义的行为。
一般情况下,只要您使用<something>*
或malloc
分配给realloc
,sizeof
的参数应为<something>
,即从类型中删除最后一个*
。