我有一个数组,我试图从中删除值,但是当我尝试从数组中删除时遇到2个问题:
1。)当我尝试从已满的数组中删除时,我收到 * Stack Smashing Detected * 错误
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()中选择的用户。
答案 0 :(得分:2)
我看到两个问题:
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;
}