C删除数组元素,程序停止

时间:2015-03-07 21:28:12

标签: c arrays eclipse crash

好的,所以我正在尝试创建一个类似数据库的简易C程序,这意味着在数组中添加元素。由结构组成的静态数组:

typedef struct {
    int id;
    char name[20];
    char active[20];
    int quantity;
} Medicine;

接下来的2个是另一个模块

typedef Medicine ElemType;

typedef struct {
    int len;
    ElemType medList[30];
} StaticList;

好的,一切都很好,直到我尝试创建一个函数从名称中删除此静态数组中的元素。就像used使用了一个名字一样,我删除了名称与给定名称相匹配的元素。

void removeElem(StaticList *l, char* value) {
    int k;
    k = l->len;
    int i = 0;
    while (1) {
        Medicine m = get(l, i);
        if (strcmp(m.name, value)==0) {
            int j = i;
            for (j = i; j<k-1; j++) {
                l[j] = l[j+1];---changed to ->> l->medList[j] = l->medList[j+1];
            }
            (*l).len--;
            break;
        }
        i++;
        if (i == k-1) {
            break;
        }
    }
}

问题?我的程序具有以下功能: - 加上元素 - 列出所有元素 - 删除elem

如果我添加1个elem,那么我删除它...我的列表应该是空的吗?好吧我的东西充满了。当我尝试添加另一个元素时,我的程序崩溃了,为了找出发生了什么以及我的列表有多长时间...我在清空列表后puta print并且说“4406168 Elems added”。 所以基本上我从0开始,添加1个elem,尝试删除它,我的数组充满4406168更多?发生了什么事?

如果需要更多信息,我会提供任何信息。谢谢。

1 个答案:

答案 0 :(得分:0)

typedef struct{
    int len;
    int a[10];
} List;

void removeElem(List& list, const int val)
{
    int i = 0;
    while(i < list.len){

        if(list.a[i] == val){ // if match
            // copy values forward
            for(int j=i+1;j<list.len;++j){
                list.a[j-1] = list.a[j];
            }
            --list.len;
        }
        ++i;
    }
}