0

我正在尝试在 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);
4

1 回答 1

1

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

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

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

这很可能会导致调用此函数的代码出现问题,因为该代码将不知道指针更改的任何内容。通过引用传递elements(即指向指针的指针)或返回新指针。

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

于 2013-11-02T22:20:01.027 回答