我正在处理一个分配,我必须编写一个功能,该函数采用动态分配的字符串和索引,并在该索引处删除元素。使用提供的示例主函数来测试代码,它在函数的第一个调用中崩溃,我不知道为什么。这是我的代码。
int removeElement(ArrayList *list, int index)
{
int i;
if(list != NULL && index < list->size)
{
for(i = index; i < list->size - 1; i++)
{
free(list->array[i]);
list->array[i] = malloc(sizeof(char) * (strlen(list->array[i + 1]) + 1));
if(list->array[i] = NULL)
{
printf("Can't allocate memory. Returning 0.n");
return 0;
}
strcpy(list->array[i], list->array[i + 1]);
}
free(list->array[i]);
list->array[i] = NULL;
list->size--;
return 1;
}
return 0;
};
我认为这可能是因为第一个字符串("名称列表")大于第二个字符串(" Sean")。但是我仍然对它的工作方式感到困惑。
这不是对您的问题的直接答案,但是您不妨复制指针,而不是所有这些malloc
S和strcpy
S:
int i;
if (list != NULL && index < list->size)
{
free(list->array[index]);
for (i=index; i<list->size-1; i++)
list->array[i] = list->array[i+1];
list->size--;
return 1;
}
或者如果您不介意字符串的顺序,那么更好:
if (list != NULL && index < list->size)
{
free(list->array[index]);
if (index < list->size-1)
list->array[index] = list->array[list->size-1];
list->size--;
return 1;
}