не могу решить проблему с предупреждением C++ C6386

не могу решить проблему с предупреждением C6386

#include <iostream>
#include <cmath>
#include <fstream>

using namespace std;
//чтение массива
int* readarr(const char* filename, int& size) {
    ifstream file(filename);
    file >> size;
    int* arr = new int[size];
    for (int i = 0; i < size; i++) {
        file >> arr[i];
    }
    file.close();

    return arr;
}
//запись массива
void writearr(const char* filename, int* arr, int size, const char* arrname) {
    ofstream file(filename);
    file << arrname << "(" << size << ")";
    for (int i = 0; i < size; i++) {
        file << arr[i] << " ";
    }
    file.close();
}

//сумма цифр в числе
int sum_num(int num) {
    int sum = 0;
    num = abs(num);
    while (num > 0) {
        sum += num % 10;
        num /= 10;
    }
    return sum;
}
//простое ли число
bool prost(int num) {
    int k = 0;
    for (int i = 0; i < sqrt(num) + 1; i++) {
        if (num % i == 0) {
            k++;
        }
    }
    if (k > 0) {
        return false;
    }
    else {
        return true;
    }
}
//индекс 1-го максимального
int max1(int* arr, int size) {
    int maxIndex = 0;
    int maxValue = arr[0];

    for (int i = 0; i < size; i++) {
        if (maxValue < arr[i]) {
            maxValue = arr[i];
            maxIndex = i;
        }
    }

    return maxIndex;
}
//среднее квадратичное
double sredkv(int* arr, int size) {
    double sum = 0.0;
    for (int i = 0; i < size; i++) {
        sum += arr[i] * arr[i];
    }
    return sqrt(sum / size);
}
//удаление элемента
int* delelem(int* arr, int& size, int index) {
    int* newarr = new int[size - 1];
    for (int i = 0; i < index; i++) {
        newarr[i] = arr[i];
    }
    for (int i = index; i < size - 1; i++) {
        newarr[i] = arr[i + 1];
    }

    delete[] arr;
    size--;

    return newarr;
}
//удаление простых элем после макс
void delprostel(int*& arr, int& size) {
    int maxIndex = max1(arr, size);
    for (int i = maxIndex + 1; i < size;) {
        if (prost(arr[i])) {
            arr = delelem(arr, size, i);
        }
        else {
            i++;
        }
    }
}

int main() {
    int x_size, y_size = 0;
    int* x_arr = readarr("input.txt", x_size);
    for (int i = 0; i < x_size; i++) {
        if (sum_num(x_arr[i]) % 2 == 1) {
            y_size++;
        }
    }
    int* y_arr = new int[y_size];
    int y_num = 0;
    for (int i = 0; i < x_size; i++) {
        if (sum_num(x_arr[i]) % 2 == 1) {
            y_arr[y_num] = x_arr[i];
            y_num++;
        }
    }
    double Xdo = sredkv(x_arr, x_size);
    double Ydo = sredkv(y_arr, y_size);
    delprostel(x_arr, x_size);
    delprostel(y_arr, y_size);
    double Xafter = sredkv(x_arr, x_size);
    double Yafter = sredkv(y_arr, y_size);

    ofstream file("output.txt");
    file << "X до обработки: " << Xdo << endl;
    file << "X после обработки: " << Xafter << endl;
    file << "Y до обработки: " << Ydo << endl;
    file << "Y после обработки: " << Yafter << endl;

    file.close();

    delete[] x_arr;
    delete[] y_arr;
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Ограничимся только предупреждением C6386, раз вопрос о нем. Оно выдается в двух местах...

Рассмотрим первое предупреждение - тут

int* delelem(int* arr, int& size, int index) {
    int* newarr = new int[size - 1];

    for (int i = 0; i < index; i++) {
        newarr[i] = arr[i];
    }

Это просто паранойя :) - компилятор же не знает, что вы там передадите в index, может, значение куда большее size. Вот и нервничает.

Успокойте его, что даже так он никуда не выскочит, например:

int* delelem(int* arr, int& size, int index) {
    int* newarr = new int[size - 1];

    for (int i = 0; i < index && i < size-1; i++) {
        newarr[i] = arr[i];
    }

Со вторым предупреждением, думаю, сами теперь справитесь?

→ Ссылка