Ошибка на этапе выполнения.Отладчиком определил что слетает во втором вызове функции minusEL на месте delete[]ar.Но там стоит проверка да и отладчик показывал что массив не пустой.В чём проблема и как можно решить
#define FOR for(int i=0;i<size;i++)
int * minusEL(int *ar, int &size,int y)
{
int *pr = new int[--size]{};
FOR
{
pr[i] = ar[i];
if (i >= y)
pr[i] = ar[i + 1];
}
if (ar)
{
delete[]ar;
ar = nullptr;
}
return pr;
}
int *paste(int *ar, int &size,int f,int h)
{
int *pr = new int[size++]{};
FOR
{
if (i == h)
pr[i] = f;
else if (i > h)
pr[i] = ar[i - 1];
else
pr[i] = ar[i];
}
if (ar)
{
delete[]ar;
ar = nullptr;
}
return pr;
}
void main()
{
const int a = -12, b = 56;
int size = 20;
int *ar = new int[size]{};
fill(ar, size, a, b);
print(ar, size);
FOR
if (ar[i] < 0)
{
int a = ar[i] * (-1);
ar = paste(ar, size, a, i+1);
}
print(ar, size);
FOR
if (ar[i] % 2 == 0)
{
ar = minusEL(ar, size, i);
i--;
}
print(ar, size);
delete[]ar;
ar = nullptr;
}
В функции paste
происходит выход за пределы массива. Размер выделенного буфера будет на 1 меньше, чем требуется, так как тут используется постфиксный инкремент. Не следует мешать инкременты и декременты с другими операциями. Не следует использовать постфиксные варианты.
++size;
int *pr = new int[size]{};
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Нужна помощь в форматном выводеНужно устанавливать фиксированую ширину поля
Помогите найти ошибку,при выполнении вылезает какая-то непонятная шляпа,весь день не могу понять в чем делоПрограмма должна удалять из строки...
Подскажите пожалуйста, что не так, а то вроде бы типичный код, а ошибка одна и та же постоянно, если что OS Linux Ubuntu, IDE AnjutaЗаранее спасибо за ответы
Необходимо распаковать архивbz2, желательно без внешних зависимостей