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

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

Восстановить пароль Регистрация
 
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
26.03.2014, 12:04     Нужно ли под массив выделять память функциями malloc или new? #1
собственно вот программа по вводу размера массива, вводу массива, сортировки:
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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
26.03.2014, 12:10     Нужно ли под массив выделять память функциями malloc или new? #2
У тебя VLA, по своей сути это и есть динамический массив.
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
26.03.2014, 12:28  [ТС]     Нужно ли под массив выделять память функциями malloc или new? #3
Цитата Сообщение от castaway Посмотреть сообщение
У тебя VLA, по своей сути это и есть динамический массив.
Что за VLA?

Добавлено через 38 секунд
И если тут не нужно выделять дин. память, то в каких случаях нужно?
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
26.03.2014, 12:51     Нужно ли под массив выделять память функциями malloc или new? #4
Это массив переменной длины, введен в стандарт 14-го года.
Память освободится при выходе из скопа. Если есть необходимость вручную освобождать память, тогда используй new/delete.
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
26.03.2014, 12:54     Нужно ли под массив выделять память функциями malloc или new? #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от andreyananas Посмотреть сообщение
Что за VLA?
Variable-Length Arrays. В C++ их нет (возможно пока). У тебя GCC (mingw), а там это доступно в качестве расширения языка (фича из С99 и выше). Следовательно на других С++ компиляторах твой код работать не будет.

Добавлено через 1 минуту
Подробнее почитать можно тут.
andreyananas
 Аватар для andreyananas
17 / 17 / 5
Регистрация: 15.10.2013
Сообщений: 804
26.03.2014, 14:00  [ТС]     Нужно ли под массив выделять память функциями malloc или new? #6
Цитата Сообщение от castaway Посмотреть сообщение
Память освободится при выходе из скопа.
При выходе из { } в каких создан был массив?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 14:20     Нужно ли под массив выделять память функциями malloc или new?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,332
Завершенные тесты: 1
26.03.2014, 14:20     Нужно ли под массив выделять память функциями malloc или new? #7
Цитата Сообщение от andreyananas Посмотреть сообщение
При выходе из { } в каких создан был массив?
Именно так.
Yandex
Объявления
26.03.2014, 14:20     Нужно ли под массив выделять память функциями malloc или new?
Ответ Создать тему
Опции темы

Текущее время: 23:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru