Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
#1

Нужно ли под массив выделять память функциями malloc или new? - C++

26.03.2014, 12:04. Просмотров 330. Ответов 6
Метки нет (Все метки)

собственно вот программа по вводу размера массива, вводу массива, сортировки:
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
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleOutputCP(1251);
    char con;
    int n(0), a(0);
    do
    {
        system("cls");
        cout << " [---Программа для сортировки массива---]" << endl;
        cout << " Введите размер массива: " << endl;
        cin >> n;
        double rn[n];
        for(int i(0); i<n; i++)
        {
            cout << " Введите " << i+1 << "й элемент:" << endl;
            cin >> rn[i];
        }
        cout << "\n\n Для сортировки по возростанию введите - 1\n";
        cout << " Для сортировки по убыванию введите    - 2\n\n";
        cin >> a;
        if(a == 1)
        {
            double t;
            for(int i(0); i<n-1; i++)
                for(int j=i+1; j<n; j++)
                {
                    if(rn[i]>rn[j])
                    {
                        t=rn[i];
                        rn[i]=rn[j];
                        rn[j]=t;
                    }
                }
        }
        else
            if(a == 2)
            {
            double t;
            for(int i(0); i<n-1; i++)
                for(int j=i+1; j<n; j++)
                {
                    if(rn[i]<rn[j])
                    {
                        t=rn[i];
                        rn[i]=rn[j];
                        rn[j]=t;
                    }
                }
            }
        for(int i(0); i<n; i++)
        {
            cout << " rn[" << i+1 << "] = " << rn[i] << endl;
        }
        cout <<"  размер массива -  " << sizeof(rn) << endl;
 
 
 
 
        cout << "\n Для продолжения программы введите - 'y' \n";
        cout << " для выхода исз программы, введите любой символ...\n";
        cin >> con;
    }
    while(con=='y');
    return 0;
}
Вопрос:
Нужно ли под массив выделять память функциями malloc или new? Если в принцип все и так работает.
Или все таки, правильно будет выделить дин. память, а в конце программы - удалить её?

Добавлено через 2 минуты
Пользуюсь последним Qt MinGW
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2014, 12:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужно ли под массив выделять память функциями malloc или new? (C++):

Можно ли выделять память под объект класса с помощью функций calloc, malloc или realloc? - C++
Интересует данный вопрос. Можно ли и имеет ли вобще смысл например выделять память под объект класса с помощью функций calloc, malloc или...

Выделить память под двумерный массив за один вызов функции malloc - C++
Выделить память под двумерный массив за один вызов функции malloc Если можно - с комментариями

Как лучше выделять память: динамичски или в стэке? - C++
Я раньше всегда думал, что в стеке происходит более быстрое выделение, но сейчас нашел в интернете одну статью, где было написано: ...

Необходимо помочь с след. функциями assert(), malloc(), iterator - C++
Здравствуйте! Есть вопрос по реализации некоторых функций. Написана программа стек в СИ + все возможные действия + доп. стек (корзина)....

Нужно ли очищать память, выделенную под вектор? - C++
Доброго времени суток. При работе с динамическими массивами всегда чистил память оператором delete. Нужно ли делать тоже самое с векторами,...

Как динамически выделять память на один элемент массива? - C++
Вот программа: int main() { int n,a,b; Item *mas; cout &lt;&lt; &quot;Enter amount of coordinates&quot; &lt;&lt; endl; cin &gt;&gt; n; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
26.03.2014, 12:10 #2
У тебя VLA, по своей сути это и есть динамический массив.
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
26.03.2014, 12:28  [ТС] #3
Цитата Сообщение от castaway Посмотреть сообщение
У тебя VLA, по своей сути это и есть динамический массив.
Что за VLA?

Добавлено через 38 секунд
И если тут не нужно выделять дин. память, то в каких случаях нужно?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
26.03.2014, 12:51 #4
Это массив переменной длины, введен в стандарт 14-го года.
Память освободится при выходе из скопа. Если есть необходимость вручную освобождать память, тогда используй new/delete.
DrOffset
7094 / 4235 / 950
Регистрация: 30.01.2014
Сообщений: 7,010
26.03.2014, 12:54 #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от andreyananas Посмотреть сообщение
Что за VLA?
Variable-Length Arrays. В C++ их нет (возможно пока). У тебя GCC (mingw), а там это доступно в качестве расширения языка (фича из С99 и выше). Следовательно на других С++ компиляторах твой код работать не будет.

Добавлено через 1 минуту
Подробнее почитать можно тут.
andreyananas
22 / 22 / 9
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
26.03.2014, 14:00  [ТС] #6
Цитата Сообщение от castaway Посмотреть сообщение
Память освободится при выходе из скопа.
При выходе из { } в каких создан был массив?
SatanaXIII
Супер-модератор
Эксперт С++
5610 / 2644 / 245
Регистрация: 01.11.2011
Сообщений: 6,505
Завершенные тесты: 1
26.03.2014, 14:20 #7
Цитата Сообщение от andreyananas Посмотреть сообщение
При выходе из { } в каких создан был массив?
Именно так.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 14:20
Привет! Вот еще темы с ответами:

malloc и new (динамическая память) - C++
Ребят, привет. ОЧчень интересует вопрос с динамической памятью . Как эта штука реализованна внутри ? я понимаю, что процессу выделяется в...

Как malloc выделяет память? - C++
Почему, если я выделяю память для одного int, вот так int *myArray = (int *)malloc(sizeof(int)); То в итоге я могу записать в myArray...

Подскажите пожалуйста какими функциями можно выделять предложение в тексте и при нажатии на клавишу, чтобы выделялось другое предложение - C++
#define _CRT_SECURE_NO_WARNINGS #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;stdio.h&quot; #include &quot;string&quot; using namespace...

Динамически выделить память под массив - C++
Задание было в следующем: дан вещественный двумерный массив А. Поменять местами максимальный элемент главной и побочной диагоналей с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.03.2014, 14:20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru