не могу решить проблему с предупреждением 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];
}
Со вторым предупреждением, думаю, сами теперь справитесь?