从数组中添加/删除元素

时间:2013-11-02 22:15:54

标签: c arrays

我正在尝试在C中编写2个函数,其中一个函数会在我作为参数传递的数组末尾添加一个元素,另一个函数将从数组中删除一个元素作为参数传递。

我对C并不熟悉,也不熟悉指针算法。

我尝试过类似的东西,但似乎没有正常工作:

void remove_element(type *elements, type element, int size){
    int i;
    int index = 0;
    for(i=0; i<size; i+=1){
        if(equals(elements[i], element)) index = i;
    }

    for(i=index; i<size-1; i+=1){
        elements[i] = elements[i+1];
    }
}


void add_element(type *elements, type element, int size){
    elements = realloc(elements, size*sizeof(element));
    elements[size-1] = element;
}

这就是我想要调用函数的方法:

add_element(elements, new_element, size);
remove_element(elements, element_to_remove, size);

1 个答案:

答案 0 :(得分:1)

这两行可能会导致未定义的行为

cvorovi = realloc(elements, size*sizeof(element));
elements[size-1] = cv;

realloc函数不能保证返回指向要重新分配的相同区域的指针,这意味着elements可能不会在调用后指向分配的区域。 必须使用返回的指针。

这很可能会导致代码调用这个函数出现问题,因为该代码对指针的更改一无所知。通过引用传递elements(即指向指针的指针)或返回新指针。

此外,在看到您的修改后,当您致电add_element时, 记得传递的尺寸大于当前尺寸?否则它将一遍又一遍地重新分配相同的大小,并覆盖每次调用的最后插入的元素。您可能需要考虑使结构跟踪这些,以及将此结构作为参数并在内部处理所有事物(如跟踪大小)的特殊函数集。