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

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

Войти
Регистрация
Восстановить пароль
 
 
AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
#1

Динамическая память под объект - C++

30.05.2012, 20:30. Просмотров 682. Ответов 18
Метки нет (Все метки)

Проблема в том, что после второго выделения в первом элементе уже хранится 0. В коде описана проблема. Я понимаю из-за чего проблема, но не знаю как её обойти.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
using namespace std;
 
class bus
{
    int x;
public:
    bus(){x=0;}
    friend void main();
};
 
void main()
{
    bus *busses;
    busses=new bus[1];
    busses[0].x=1;
    cout<<busses[0].x<<endl; // здесь busses[0] равен 1
    busses=new bus[2];
    busses[1].x=3;
    cout<<busses[0].x<<busses[1].x<<endl; // а здесь он уже равен 0.
 
    system("pause");
}
Добавлено через 2 часа 27 минут
Неужели такой сложный вопрос?)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2012, 20:30     Динамическая память под объект
Посмотрите здесь:

динамическая память под матрицы - C++
Добрый день! Нужна помощь очень сильно. Есть две задачи, помогите пож реализовать. 1.Написать функцию, получающую на входе две...

Можно ли в С++ выделить память под объект в заданную мной область памяти? - C++
Есть код static inline void convertFromTextAlternative(quint8* dst, const QVariant&amp; src){ QString *a = new...

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

Динамическая память - C++
Есть 2 массива одной размерности: int *m1 = new int , *m2 = new int ; где N, M некие числа. Собственно вопрос: как...

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

Динамическая память - C++
Помогите перевести массивы в динамическую память пожалуйста + почему-то не работает запись в файл(не перезаписывает). #include &lt;iostream&gt;...

Динамическая память - C++
Кто сможет помочь? Дана матрица А. Упорядочить элементы каждой строки в порядке не убывания. (нужно составить 2 программы с...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rakota
35 / 35 / 1
Регистрация: 05.02.2012
Сообщений: 76
30.05.2012, 20:37     Динамическая память под объект #2
C++
1
busses=new bus[2];
Здесь выделяется память под новый массив, значения старого теряются.
Andrey.K
342 / 263 / 15
Регистрация: 14.11.2010
Сообщений: 482
30.05.2012, 20:38     Динамическая память под объект #3
При первом выделении у тебя x=0, потом значения перезаписываются так как переопределния массива объектов идет.
При втором выделении у тебя busses[0].x=0, а busses[1].x=3 . Всё правильно работает? В чём проблема, ты же не заменяешь busses[0].x на другое значение вот оно и равняется 0.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
30.05.2012, 20:42     Динамическая память под объект #4
А чего Вы удивляетесь? Вы думаете когда пишите второй раз
C++
1
busses = new bus[ 2 ];
Вы добавляете 2 объекта? Оператор new, при успешном выделении памяти, возвращает указатель на эту самую выделенную память. При этом старая память у Вас остается потерянной. Такие ситуации приводят к утечке памяти.
AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
30.05.2012, 21:17  [ТС]     Динамическая память под объект #5
Я вроде написал в 1 посте что знаю в чем проблема, а вас прошу показать как добавлять память без потери уже записаных данных.
rakota
35 / 35 / 1
Регистрация: 05.02.2012
Сообщений: 76
30.05.2012, 21:23     Динамическая память под объект #6
Просто выделите сразу размер для всех элементов, т.е. сразу new bus[2].
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
30.05.2012, 21:29     Динамическая память под объект #7
AfoTax, попробуй использовать vector.
C++
1
2
#include <vector>
std::vector<bus> busses;
и добавляй, удаляй, без потерь.

Добавлено через 1 минуту
http://cplusplus.com/reference/stl/vector/push_back/
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
30.05.2012, 21:51     Динамическая память под объект #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    bus *busses;
    busses=new bus[1];
    busses[0].x=1;
    cout<<busses[0].x<<endl; // здесь busses[0] равен 1
 
    {
        bus *temp = busses;
        busses = new bus [ 2 ];
        busses[ 0 ] = temp[ 0 ];
        delete [] temp;
    }
 
    busses[1].x=3;
    cout<<busses[0].x<<busses[1].x<<endl; // а здесь он уже равен 0.
AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
30.05.2012, 23:29  [ТС]     Динамическая память под объект #9
Спасибо
MrGluck
Модератор
Эксперт CЭксперт С++
7183 / 4349 / 634
Регистрация: 29.11.2010
Сообщений: 11,839
30.05.2012, 23:31     Динамическая память под объект #10
Цитата Сообщение от AfoTax Посмотреть сообщение
C++
1
friend void main();
оО Отсыпь немного.
AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
30.05.2012, 23:35  [ТС]     Динамическая память под объект #11
Цитата Сообщение от instagib Посмотреть сообщение
AfoTax, попробуй использовать vector.
C++
1
2
#include <vector>
std::vector<bus> busses;
и добавляй, удаляй, без потерь.

Добавлено через 1 минуту
http://cplusplus.com/reference/stl/vector/push_back/
Вектора использовать нельзя, типо не проходили такого)

Цитата Сообщение от rakota Посмотреть сообщение
Просто выделите сразу размер для всех элементов, т.е. сразу new bus[2].
Изначально не известно сколько будет элементов, может быть хоть 100500

Цитата Сообщение от Toshkarik Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    bus *busses;
    busses=new bus[1];
    busses[0].x=1;
    cout<<busses[0].x<<endl; // здесь busses[0] равен 1
 
    {
        bus *temp = busses;
        busses = new bus [ 2 ];
        busses[ 0 ] = temp[ 0 ];
        delete [] temp;
    }
 
    busses[1].x=3;
    cout<<busses[0].x<<busses[1].x<<endl; // а здесь он уже равен 0.
Я привел просто пример проги. В осном проекте объекты гораздо больше и много элементов, а на такую операцию понадобится слишком много рессурсов.
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,452
Записей в блоге: 17
30.05.2012, 23:56     Динамическая память под объект #12
Ну в таком случае придется реализовать вектор ручками самому
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
31.05.2012, 00:00     Динамическая память под объект #13
А как Вы хотели? Просто раз и добавили новые элементы? Как вы себе это представляете в реализованном виде? По другому никак и не получится.
AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
31.05.2012, 01:30  [ТС]     Динамическая память под объект #14
Я точно знаю в простой C это без проблем реализовывается, поэтому думаю и в C++ что-то подобное предусмотрено.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2012, 01:37     Динамическая память под объект
Еще ссылки по теме:

Динамическая память [new] - C++
Если записать так: char *p; p = new char; cin&gt;&gt;p; for(int i=0; i&lt;strlen(p); i++) cout&lt;&lt;p&lt;&lt;endl;

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

Видеопамять и динамическая память - C++
Появилась необходимость написать программу для работы c видеопамятью и с динамической памятью. А конкретно необходимо осуществляться запись...

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

Задачка: Динамическая память - C++
Задачка: В динамическую память занести набор введенных с клавиатуры длинных целых натуральных чисел (признак завершения ввода - число...


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

Или воспользуйтесь поиском по форуму:
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,452
Записей в блоге: 17
31.05.2012, 01:37     Динамическая память под объект #15
Ну да- вектор
Yandex
Объявления
31.05.2012, 01:37     Динамическая память под объект
Ответ Создать тему
Опции темы

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