Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950

Динамическое выделение памяти для массива

03.10.2016, 12:51. Показов 1855. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу разобраться, почему программа вызывает точку остановы после выбора действия в функции, причем не показывает, где.
Она происходит и в остальных функциях, просто не стал их сюда выкладывать, чтобы не увеличивать код.
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
#include <iostream>
#include <cctype>
using namespace std;
 
void funcInclude(int *, int);
void funcDel(int *, int);
void funcSearchNum(int *, int);
void funcSearchPos(int *, int);
void funcOut(int *, int);
 
int main() {
    setlocale(LC_ALL, "russian");
    int size = 0, funcNum = 0;
    int *List = new int[size];
    bool flag = false;
    cout << "Введите размер массива: ";
    cin >> size;
    cout << "Заполните массив: ";
    for (int i = 0; i < size; i++)
        cin >> List[i];
    cout << "Выберите номер действия, к которому хотите перейти: " << endl;
    cout << "\t 1.Вставить элемент \n"
        << "\t 2.Удаление элемента \n"
        << "\t 3.Поиск элемента по позиции \n"
        << "\t 4.Поиск позиции элемента \n"
        << "\t 5.Вывод списка \n" 
        << "\t 6.Вывод списка \n\n";
 
    while (flag == false) 
    {
        cin >> funcNum;
 
        switch (funcNum) {
        case 1: funcInclude(List, size);
        case 2: funcDel(List, size);
        case 3: funcSearchNum(List, size);
        case 4: funcSearchPos(List, size);
        case 5: funcOut(List, size);
        case 6: flag = true;
 
        }
    }
    delete[] List;
    system("pause");
    return 0;
}
void funcInclude(int *List, int size) {
    int posNum = 0, val = 0, i, temp = 0;
    cout << "Введите номер позиции, куда хотите вставить элемент: ";
    cin >> posNum;
    cout << endl;
    cout << "Введие значение вносимого элемента: ";
    cin >> val;
    size = size + 1;
    for (i = size; i < posNum; i--) {
        List[i + 1] = List[i];
    }
    List[posNum] = val;
    for (i = 0; i < size + 1; i++)
        cout << List[i];
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.10.2016, 12:51
Ответы с готовыми решениями:

Динамическое выделение памяти для массива
Кто может помочь решить задачу. Для заданного двумерного массива из n строк и m столбцов вывести на экран следующее меню операций: ...

Динамическое выделение памяти для элементов массива
Нужно разделить программу на функции ( не могу толком понять как это сделать) и выполнить следующие требования: 1. Первая функция не...

Динамическое выделение памяти для двумерного массива
нужна помощь вот тело программы, не могу сделать динамическое выделение памяти для первого двумерного массива. второй массив получается...

4
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.10.2016, 13:01
C++
1
2
3
4
5
    int size = 0, funcNum = 0;
    int *List = new int[size];
    bool flag = false;
    cout << "Введите размер массива: ";
    cin >> size;
Может быть следует ввести размер массива до выделения такового!?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.10.2016, 13:02
Лучший ответ Сообщение было отмечено DenKG как решение

Решение

Цитата Сообщение от DenKG Посмотреть сообщение
почему программа вызывает точку остановы после выбора действия в функции
срабатывает дебаг-защита памяти,
которую вы портите.

смотрите:
Цитата Сообщение от DenKG Посмотреть сообщение
int size = 0, funcNum = 0;
* * int *List = new int[size];
вы здесь выделили в куче массив из нуля элементов.
а вот здесь:
C++
1
2
for (int i = 0; i < size; i++)
        cin >> List[i];
выполняете запись в память, которая вам не пренадлежит.

лекарство:


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
#include <iostream>
#include <cctype>
using namespace std;
 
void funcInclude(int *, int);
void funcDel(int *, int);
void funcSearchNum(int *, int);
void funcSearchPos(int *, int);
void funcOut(int *, int);
 
int main() {
    setlocale(LC_ALL, "russian");
    int size = 0, funcNum = 0;
    int *List = nullptr;
    bool flag = false;
    cout << "Введите размер массива: ";
    cin >> size;
    int *List = new int[size];
    cout << "Заполните массив: ";
    for (int i = 0; i < size; i++)
        cin >> List[i];
    cout << "Выберите номер действия, к которому хотите перейти: " << endl;
    cout << "\t 1.Вставить элемент \n"
        << "\t 2.Удаление элемента \n"
        << "\t 3.Поиск элемента по позиции \n"
        << "\t 4.Поиск позиции элемента \n"
        << "\t 5.Вывод списка \n" 
        << "\t 6.Вывод списка \n\n";
 
    while (flag == false) 
    {
        cin >> funcNum;
 
        switch (funcNum) {
        case 1: funcInclude(List, size);
        case 2: funcDel(List, size);
        case 3: funcSearchNum(List, size);
        case 4: funcSearchPos(List, size);
        case 5: funcOut(List, size);
        case 6: flag = true;
 
        }
    }
    delete[] List;
    system("pause");
    return 0;
}
void funcInclude(int *List, int size) {
    int posNum = 0, val = 0, i, temp = 0;
    cout << "Введите номер позиции, куда хотите вставить элемент: ";
    cin >> posNum;
    cout << endl;
    cout << "Введие значение вносимого элемента: ";
    cin >> val;
    size = size + 1;
    for (i = size; i < posNum; i--) {
        List[i + 1] = List[i];
    }
    List[posNum] = val;
    for (i = 0; i < size + 1; i++)
        cout << List[i];
}
1
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
03.10.2016, 16:45  [ТС]
Спасибо. Подскажите, а как нормально реализовать первую функцию для вставки элемента в динамический массив?
Ибо у меня элемент вставляется, но выводится неверное количество элементов и потом какой-то непонятный набор цифр.
А нужно примерно так:
есть массив, состоящий из элементов 1 2 3 4 5
Мне нужно между 2 и 3 вставить 9 и затем вывести массив 1 2 9 3 4 5
Вот код моей функции, которая работает криво:
P.s.: size-это размер динамического массива.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void funcInclude(int *List, int size) {
    int posNum = 0, val = 0, i, temp = 0;
    cout << "Введите номер позиции, куда хотите вставить элемент: ";
    cin >> posNum;
    cout << endl;
    cout << "Введие значение вносимого элемента: ";
    cin >> val;
    size = size + 1;
    for (i = size; i < posNum; i--) {
        List[i + 1] = List[i];
    }
    List[posNum] = val;
    for (i = 0; i < size + 1; i++)
        cout << List[i]<<endl;
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
03.10.2016, 23:51
Цитата Сообщение от DenKG Посмотреть сообщение
как нормально реализовать первую функцию для вставки элемента в динамический массив?
Во-первых: передавать указатель и size по ссылке.
Создать временный указатель, выделить под него память больше на единицу, чем size.
Скопировать в новую память часть элементов из старой, вставить новый элемент, скопировать оставшуюся часть элементов из старой памяти в новую.
Присвоить size новое значение (на единицу больше).
Освободить старую память.
Указателю, на старую память, присвоить значение временного указателя на новую память.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.10.2016, 23:51
Помогаю со студенческими работами здесь

Динамическое выделение памяти для массива классов
Привет. В строках 84 - 98 пытаюсь выделить динамически память для свича. После выполнения кейса 'n', размер массива увеличивается на 1,...

Динамическое выделение памяти для массива указателей на char
Доброго времени суток! пытаюсь выделить память для массива указателей на char следующий код #include &lt;iostream&gt; #include...

Динамическое выделение памяти и обработка массива с применением указателей
Уплотнить заданную матрицу, удалив из неё строки и столбцы, заполненные нулями. Найти номер первой из строк, содержащих хотя бы один...

Динамическое выделение памяти для структур
Добрый день. Есть следующие структуры: typedef struct __attribute__((aligned(16))) { float u, v; unsigned int color; ...

Динамическое выделение памяти для строки
Подскажите, пожалуйста , почему в данной программе появляются ошибки в строке return Vector(v1.x + v2.x, v1.y + v2.y, v1.cp +...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru