我有一个试图从中删除值的数组,但是在尝试从该数组中删除时遇到了两个问题:
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 - 1
,j + 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;
}