gpt4 book ai didi

c - 从C中的动态数组中的特定位置删除元素

转载 作者:行者123 更新时间:2023-11-30 20:14:59 25 4
gpt4 key购买 nike

我在理解 C 中的指针和内存管理方面遇到了一些麻烦。

在这个特定的实例中,我试图从动态分配的数组中删除一个元素。

考虑以下代码行:

void deleteElemFromPosition(VectorDinamic *v, unsigned int poz){
int nCap = v->capacity;
Element* nElems = malloc(nCap * sizeof(Element));

int i;
for (i = 0; i < v->lg; i++) {
if(i!=poz)nElems[i] = v->elems[i];
else{
nElems[i]=v->elems[i+1];
++i;

}
}

free(v->elems);
v->elems = nElems;
v->capacity = nCap;
}

这一部分创建了我试图复制的数组的副本,但有一点不同。它不会将元素存储在所需的位置,但它并没有这样做,而是似乎进入了无限循环,或者实际上不是无限循环,而是非常非常大。太大以至于导致程序崩溃。

任何形式的帮助将不胜感激。

编辑:也许我应该从一开始就包含动态数组的定义。哦,好吧。

VectorDinamic * creazaVectorDinamic() {
VectorDinamic *v = malloc(sizeof(VectorDinamic));
v->elems = malloc(INIT_CAPACITY * sizeof(Element));
v->capacitate = INIT_CAPACITY;
v->lg = 0;
return v;

最佳答案

您有几个问题。首先:

  1. 您不需要 malloc() 一个全新的数组,然后将内容复制进去。只需使用 memmove 将要删除的元素上方的数组向下移动即可,然后 realloc 来缩小分配的内存。

  2. 循环将 i 递增两次,一次在 for 循环中,一次在 else 子句中。

  3. v->capacityv->lg 之间似乎存在一些混淆。这两者有什么区别?

一般来说,告诉我们在哪里以及如何崩溃会很有用,就像VectorDinamic的定义一样(注意动态 是这样拼写的)。尝试使用gdb或类似的。

关于c - 从C中的动态数组中的特定位置删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22942640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com