我有一个试图从中删除值的数组,但是在尝试从该数组中删除时遇到了两个问题:
1.)当我试图从已满的数组中删除时,会检测到*堆栈崩溃*错误
2.)当我的数组有多个副本时,我只想删除第一个实例,但它似乎删除了随机数量的实例。
我对remove函数的代码如下:

int Remove(int* array, int arrayLen, int removeNum)
{
   int i, j;

for (i = 0; i < arrayLen; i++)
 {
   if (array[i] == removeNum){
     for(j = i; j < arrayLen; j++){
        array[j] = array[j+1];
      }
      arrayLen--;
   }
}
return arrayLen;
}

其中removeNum是用户在main()中选择的。

最佳答案

我看到两个问题:
你的阅读超过了列表的末尾,因为你的内环走得太远了。(位于j = arrayLen - 1j + 1 = arrayLen,它超过了数组的末尾。)
您说您只想删除第一个找到的元素,但您的代码将继续超过该点。添加一个早期的return(或break)可以解决这个问题。
以下是您的代码的固定版本:

int remove(int* array, int arrayLen, int removeNum)
{
    int i, j;

    for (i = 0; i < arrayLen; i++)
    {
        if (array[i] == removeNum) {
            // Stop j at arrayLen - 1, which is the new end of the array
            for(j = i; j < arrayLen - 1; j++) {
                array[j] = array[j + 1];
            }

            // Return the new size
            return arrayLen - 1;
        }
    }

    // If we didn't remove anything, return the original size
    return arrayLen;
}

10-06 14:41