Крашится программа(с++)

190
22 марта 2018, 09:20

Ошибка на этапе выполнения.Отладчиком определил что слетает во втором вызове функции 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;
}
Answer 1

В функции paste происходит выход за пределы массива. Размер выделенного буфера будет на 1 меньше, чем требуется, так как тут используется постфиксный инкремент. Не следует мешать инкременты и декременты с другими операциями. Не следует использовать постфиксные варианты.

++size;
int *pr = new int[size]{};
READ ALSO
Выравнивание по центру вывод в с++

Выравнивание по центру вывод в с++

Нужна помощь в форматном выводеНужно устанавливать фиксированую ширину поля

257
Помогите новичку C++ [требует правки]

Помогите новичку C++ [требует правки]

Помогите найти ошибку,при выполнении вылезает какая-то непонятная шляпа,весь день не могу понять в чем делоПрограмма должна удалять из строки...

204
Error: no matching function for call to ‘Triangle::Triangle(double, double, double)

Error: no matching function for call to ‘Triangle::Triangle(double, double, double)

Подскажите пожалуйста, что не так, а то вроде бы типичный код, а ошибка одна и та же постоянно, если что OS Linux Ubuntu, IDE AnjutaЗаранее спасибо за ответы

187
Каким образом распакавать bz2 архив С++/Qt?

Каким образом распакавать bz2 архив С++/Qt?

Необходимо распаковать архивbz2, желательно без внешних зависимостей

206