Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 22.02.2019
Сообщений: 34

Ошибка при delete[]

22.02.2019, 17:52. Показов 3807. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не понимаю, почему при delete[] Y; выдает ошибку. Без этой строки код работает на ура. Надеюсь на вашу помощь.

Что делает программа:
Кликните здесь для просмотра всего текста

Исходные данные: массив чисел размером N.

Сформировать другой массив из элементов исходного массива, величины
которых находятся в заданных пределах от А до В, и вставить в середину
полученного массива среднее значение элементов этого массива.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
#include <conio.h>
#include <ctime>
 
 
using namespace std;
 
void CreateX(int X[], int N)                        
{
    srand(time(NULL));
 
    printf("Исходный массив: ");
 
    for (int i = 0; i < N; i++)
    {
        X[i] = rand() % 50;
        printf(" %d ", X[i] );
    }
 
}
 
int CreateY(int X[], int N, int Y[], int A, int B)
{
    int k = 0;
    for (int i = 0; i < N; i++)
    {
        if (i >= A - 1 && i <= B - 1) 
        {
            Y[k] = X[i];
            k++;
        }
    }
 
 
    return k;
}
 
int FindAverageValue(int Y[], int k)
{
    int summ = 0; // сумма элементов
    for (int i = 0; i < k; i++)
    {
        summ += Y[i];
    }
    int AverageValue = round(summ / k); // среднее значение
 
    return AverageValue;
}
 
 
void FindAveragePos(int Y[], int k, int AverageValue)
{
    int AveragePos = ceil(k / 2);
 
    for (int i = k + 1; i > AveragePos; i--)
    {
        Y[i] = Y[i - 1];
    }
 
    Y[AveragePos] = AverageValue;
}
 
void InferenceY(int Y[], int k)
{
    printf("\nПолученный массив: ");
    for (int i = 0; i < k + 1; i++)
    {
        printf(" %d ", Y[i]);
    }
}
 
int main()
{
    int N; // количество элементов
    
    setlocale(LC_ALL, "rus");
 
    printf("Введите количество N элементов в массиве: ");
    scanf_s("%d", &N);
 
    int *X = new int[N];
 
    CreateX(X, N);
    
    printf("\nВведите пределы в формате [A ... B]: ");
    int A, // левый предел
        B; // правый предел
        
    scanf_s("%d %d", &A, &B);
 
    int *Y = new int[B - A + 2];
    int k = CreateY(X, N, Y, A, B);
    delete[] X;
 
    int AverageValue =  FindAverageValue(Y, k);
 
    FindAveragePos(Y, k, AverageValue);
 
    InferenceY(Y, k);
    delete[] Y;
 
    _getch();
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.02.2019, 17:52
Ответы с готовыми решениями:

Ошибка при использовании delete
И снова здравствуйте! Пишу раз третий.Я уже готов убицца ап сцену изза этого delete.Я не понимаю что не так делаю: class CMenu { ...

Ошибка при использовании new[] / delete[]
Здравствуйте. Пишу учебную программу, моделирующую движение лифта (если кто учебник Дейтелов читал, тот поймет :) ). Для начала приведу...

Ошибка при вызове delete
Вот код // ConsoleApplication1.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include...

46
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.02.2019, 10:56
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от liv Посмотреть сообщение
Я согласен с _stanislav, надо сказать, что таких элементов нет.
А я про что? Что касается реализации, то всё едино как. По мне проще проверить счётчик, - если ноль то останавливаемся со словами "nema vasche", а если не ноль - добавляем 1 и пишем элементы. Хотя если буквально, то надо сначала создать массив из n (AB-шных) а потом создать ещё один на 1 больше, а потом переписать туда элементы (и где-то "в середине" влепить среднее). Вставить в массив не получится. Разве-что эмулировать. То есть создать еще один (временный) указатель, установить на старый массив, указатель старого массива установить на новый и удалить по временному указателю старый массив. Тогда внешне будет казаться, что в старый массив вставлен элемент.
Но если быть точным, то вставка в массив, это терминологический костыль, имхо. В список можно вставить, а в массив нельзя. Массив элементов в динамической памяти можно пересоздать в виде... и т.п. Некрасиво, - за то правда.

Добавлено через 5 минут
Цитата Сообщение от liv Посмотреть сообщение
А можно, в случае одного, и не добавлять.
Это вряд ли. Есть среднее, - надо вставить. То есть, придётся найти у него середину. Элементам всегда отдуваться. Даже средний становится крайним! Иерархия прав такова:
-Препод может навтыкать студенту,
-Студент - массиву,
-Массив может навтыкать компилятору, разве-что.
Но не наоборот. Нет равенства прав и нет равенства обязанностей. Поэтому я значительно строже к преподавателям.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
24.02.2019, 10:56
Цитата Сообщение от IGPIGP Посмотреть сообщение
Но если быть точным
повкрайничеем? если быть еще точнее в ЭВМ вообще ничего нельзя сделать чего не могут три простейших логических вентиля.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.02.2019, 11:01
IGPIGP, я бы сделал по-другому.
Во время первого прохода ищем и считаем числа,которые в интервале АВ
Одновременно, находим сумму
По итогам, смотрим, есть ли такие числа, если есть, находим среднее.
Выделяем память для массива Y (на 1 больше)
Ещё раз проходим по исходному, копируем первую половину, затем, среднее, ну и проходим до конца, копируем все остальные

Согласен, термин "вставить в массив" некорректен. Но используется
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.02.2019, 11:01
Цитата Сообщение от _stanislav Посмотреть сообщение
повкрайничеем? если быть еще точнее в ЭВМ вообще ничего нельзя сделать чего не могут три простейших логических вентиля.
_stanislav, я иду по теме:
Цитата Сообщение от wcoestarw Посмотреть сообщение
Сформировать другой массив
то есть, сначала надо один создать. Кроме исходного.
Цитата Сообщение от wcoestarw Посмотреть сообщение
вставить в середину полученного массива среднее значение элементов этого массива
Потом ещё один.
То есть, по теме иду. А где вы идёте не вижу.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.02.2019, 11:15
IGPIGP, то, что я написал выше, никак не противоречит условию

Добавлено через 5 минут
А насчёт иерархии...
Все зависит от преподавателя...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.02.2019, 11:29
Цитата Сообщение от liv Посмотреть сообщение
GPIGP, то, что я написал выше, никак не противоречит условию
Условие противоречиво само по себе и не противоречить ему непротиворечиво не получится.
Цитата Сообщение от liv Посмотреть сообщение
А насчёт иерархии... Все зависит от преподавателя...
И можно согласиться. Если система позаботится о том, чтобы преподаватель был тем кем должен быть, то вопросов не будет.
liv, хорошая задача четко определяет условие и четко формулирует получаемый результат. У математиков, как не странно, чаще бывает наоборот. Я не говорю о горстке великих. А обычный человек с отсутствующим предметным математическим мышлением, обычно напоминает блондинку на танке. Условие формируют помадой на зеркале, а посылают друг друга точно в то место, куда хотели. Парадокс.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
24.02.2019, 12:43
Цитата Сообщение от IGPIGP Посмотреть сообщение
А где вы идёте не вижу.
а я тебя подкалываю, нравится мне твоя серьезность

Добавлено через 45 секунд

Не по теме:

Цитата Сообщение от _stanislav Посмотреть сообщение
повкрайничеем?

вот это

Не по теме:

достал форум тормозить

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.02.2019, 12:43

Ошибка при использовании delete[] C++
Здравствуйте. Я создал класс, где должен динамически выделить память, а потом в конце программы, с помощью деструктора, освободить...

Ошибка при освобождении памяти (delete)
Здравствуйте! Есть массив lines, созданный вот так : int *line = new int ; Потом, пытаюсь его удалить и пересоздать : delete...

Ошибка при работе delete в деструкторе
enum place { first = 1, second }; class Passanger { public: Passanger(); void Call(); void PushButton(); int...

Ошибка при удалении массива с помощью delete
Изучаю C++ и у меня задание разбить текст неопределенной длинны на массив строк. Нацарапал класс типа string ниже выложу. В него задача...

Ошибка при Delete[] и удаление латинских букв
Задача без ипользования стандартных библиотек ввести размер строки и после этого строку, например и после этого из строки удаляются все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
47
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru