Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Sammm
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 182
#1

Как динамически выделять память на один элемент массива? - C++

07.10.2013, 23:13. Просмотров 441. Ответов 5
Метки нет (Все метки)

Вот программа:
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
int main()
{
    int n,a,b;
    Item *mas;
    cout << "Enter amount of coordinates" << endl;
    cin >> n;
    cout << "Enter coordinates" << endl;
 
    for(int i = 0; i < n; i++)
    {
         cin >> a;
         cin >> b;
         mas = new Item;
         mas[i].x = a;
         mas[i].y = b;
    }
 
    cout << endl;
 
    for(int i = 0; i < n; i++)
    {
         cout << mas[i].x << endl;
         cout << mas[i].y << endl;
    }
 
    return 0;
}
Как сделать, чтобы память выделялась постепенно для каждого элемента массива, а не вся сразу mas = new Item[n]
При такой реализации выводит только последнее значение.

Добавлено через 6 минут
При такой реализации программа вообще виснет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 23:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как динамически выделять память на один элемент массива? (C++):

Как динамически выделить память для строкового массива? - C++
Собственно сам вопрос.

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

Как засунуть в один элемент массива слово? - C++
Как засунуть в один элемент массива слово? Добавлено через 51 минуту Я смог это сделать. Если кому, вдруг понадобиться: ...

Нужно ли под массив выделять память функциями malloc или new? - C++
собственно вот программа по вводу размера массива, вводу массива, сортировки: #include &lt;iostream&gt; #include &lt;windows.h&gt; using...

Записать два элемента одного массива, как один элемент другого - C++
Здравствуйте) есть такое задание: нужно составить таблицу истинности(дискретная математика). И в процессе выполнения нужно записать...

Как и когда правильно освобождать динамически выделенную память? - C++
Доброго времени суток! Задалась вопросом, заданным в заголовке темы &quot;Как и когда правильно освобождать динамически выделенную...

5
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
07.10.2013, 23:14 #2
Перевыделять память когда нужно с копированием элементов из старой памяти в новую, после чего старую память освобождать.
А еще лучше воспользоваться контейнером.
1
Sammm
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 182
07.10.2013, 23:21  [ТС] #3
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
#include <iostream>
 
using namespace std;
 
struct Item
{
    float x;
    float y;
};
 
int main()
{
    int n,a,b;
    Item *mas;
    cout << "Enter amount of coordinates" << endl;
    cin >> n;
    cout << "Enter coordinates" << endl;
 
    for(int i = 0; i < n; i++)
    {
         cin >> a;
         cin >> b;
         mas = new Item;
         mas[i].x = a;
         mas[i].y = b;
    }
 
    cout << endl;
 
    for(int i = 0; i < n; i++)
    {
         cout << mas[i].x << endl;
         cout << mas[i].y << endl;
    }
 
    return 0;
}
Вы можете модифицировать эту программу, чтобы память выделялась для каждого элемента массива, а то я так не понимаю.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
07.10.2013, 23:26 #4
Цитата Сообщение от Sammm Посмотреть сообщение
Вы можете модифицировать эту программу, чтобы память выделялась для каждого элемента массива, а то я так не понимаю.
А чем не устраивает вариант "Выделить память сразу для всех элементов"?
1
Sammm
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 182
07.10.2013, 23:30  [ТС] #5
Мне надо не для этой легкой программки, а для более сложной, там надо выделять по ходу ее выполнения разное количество памяти.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
07.10.2013, 23:48 #6
Цитата Сообщение от Sammm Посмотреть сообщение
а для более сложной
тогда используйте контейнеры (можете даже свой написать)

Цитата Сообщение от Sammm Посмотреть сообщение
не для этой легкой программки
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
#include <iostream>
 
using namespace std;
 
struct Item
{
    float x;
    float y;
};
 
void copy_array_from ( Item * dest , const Item * src , size_t size ) {
    for ( size_t i = 0 ; i < size ; ++ i )
        dest [ i ] = src [ i ] ;
}
int main()
{
    int n,a,b;
    int size = 0 ;
    Item *mas = NULL ;
    cout << "Enter amount of coordinates" << endl;
    cin >> n;
    cout << "Enter coordinates" << endl;
 
    for(int i = 0; i < n; i++)
    {
         cin >> a;
         cin >> b;
        if ( i >= size ) {
            Item * newArray = new Item [ i + 1 ] ;
            if ( mas != NULL ) {
                copy_array_from ( newArray , mas , size ) ;
                delete [] mas ;
            }
            size = i + 1 ;          
            mas = newArray ;
        }
         mas[i].x = a;
         mas[i].y = b;
    }
 
    cout << endl;
 
    for(int i = 0; i < n; i++)
    {
         cout << mas[i].x << endl;
         cout << mas[i].y << endl;
    }
    delete [] mas ;
    return 0;
}
1
07.10.2013, 23:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 23:48
Привет! Вот еще темы с ответами:

Как выделить динамически память для данных класса - C++
Как выделить динамически память для данных класса ? class circle { double x,y,r; public:void In(); void Out(); ...

Как динамически выделить память для конструкторов класса? - C++
подскажите как динамически выделить память для конструкторов класса? class circle { double x,y,r; public: void...

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

Как захватить динамически память, не зная заранее, какое количество памяти надо? - C++
задание Считайте все записи из файла &quot;6.dat&quot;. Для чтения каждой отдельной записи осуществите динамический захват памяти. Предполагается,...


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

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

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