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

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

Войти
Регистрация
Восстановить пароль
 
andreyananas
 Аватар для andreyananas
21 / 21 / 8
Регистрация: 15.10.2013
Сообщений: 854
Завершенные тесты: 2
#1

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

26.03.2014, 12:04. Просмотров 305. Ответов 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++ Необходимо помочь с след. функциями assert(), malloc(), iterator
C++ Динамически выделить память под массив
malloc и new (динамическая память) C++
C++ Как лучше выделять память: динамичски или в стэке?
C++ Выделить память под двумерный массив за один вызов функции malloc
C++ Выделите-ка под массив память размером 32 ГБ
C++ Как динамически выделять память на один элемент массива?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4870 / 3009 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
26.03.2014, 12:10     Нужно ли под массив выделять память функциями malloc или new? #2
У тебя VLA, по своей сути это и есть динамический массив.
andreyananas
 Аватар для andreyananas
21 / 21 / 8
Регистрация: 15.10.2013
Сообщений: 854
Завершенные тесты: 2
26.03.2014, 12:28  [ТС]     Нужно ли под массив выделять память функциями malloc или new? #3
Цитата Сообщение от castaway Посмотреть сообщение
У тебя VLA, по своей сути это и есть динамический массив.
Что за VLA?

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

Добавлено через 1 минуту
Подробнее почитать можно тут.
andreyananas
 Аватар для andreyananas
21 / 21 / 8
Регистрация: 15.10.2013
Сообщений: 854
Завершенные тесты: 2
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++ Выделить память под массив размера 2^64 байтов
C++ Можно ли выделять память под объект класса с помощью функций calloc, malloc или realloc?
C++ Выделить память под массив неизвестной длины

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

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

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