Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
andreyananas
22 / 22 / 11
Регистрация: 15.10.2013
Сообщений: 862
Завершенные тесты: 2
#1

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

26.03.2014, 12:04. Просмотров 870. Ответов 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
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2014, 12:04
Ответы с готовыми решениями:

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

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

Можно ли, используя make_shared<T> выделять память под массивы, по аналогии с функцией make_unique<T>?
Интересует следующий вопрос. Можно ли, используя данную функцию выделять...

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

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

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

Добавлено через 38 секунд
И если тут не нужно выделять дин. память, то в каких случаях нужно?
0
castaway
Эксперт С++
4929 / 3036 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
26.03.2014, 12:51 #4
Это массив переменной длины, введен в стандарт 14-го года.
Память освободится при выходе из скопа. Если есть необходимость вручную освобождать память, тогда используй new/delete.
1
DrOffset
7782 / 4601 / 1117
Регистрация: 30.01.2014
Сообщений: 7,499
26.03.2014, 12:54 #5
Лучший ответ Сообщение было отмечено andreyananas как решение

Решение

Цитата Сообщение от andreyananas Посмотреть сообщение
Что за VLA?
Variable-Length Arrays. В C++ их нет (возможно пока). У тебя GCC (mingw), а там это доступно в качестве расширения языка (фича из С99 и выше). Следовательно на других С++ компиляторах твой код работать не будет.

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

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

Как динамически выделять память на один элемент массива?
Вот программа: int main() { int n,a,b; Item *mas; cout &lt;&lt;...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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