Domanda

I'm working on an assignment and I have to write a function that takes in a dynamically allocated array of strings and an index, and removes the element at that index. Using a sample main function provided to test the code, it crashes at the first call of the function, and I have no idea why. Here's my code.

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;
};

I think it might be because the first string ("List of names") is larger than the second ("Sean"). But I'm still confused regarding to how it works.

È stato utile?

Soluzione

This is not a direct answer to your question, but you might as well just copy pointers instead of all these mallocs and strcpys:

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;
}

Or if you don't mind the order of the strings, then even better:

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top