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

Массив в классе - C++

Восстановить пароль Регистрация
 
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
26.04.2014, 00:34     Массив в классе #1
Здравствуйте!Помогите разобраться.Создаю динамический массив в конструктуре класса,но в отладчике на протяжении работы программы отображается,будто он хранит один элемент(даже непроиндексованный).Делал это ,ибо пытался решить задачу:программист не знает сколько введёт элементов в стек пользователь.Я думал создать массив размерностью 1 и потом создать функцию,которая при каждом вызове функции push(добавить элемент) будет увеличивать размер массива на единицу,но выдаёт чушь,после увеличения размера вместо элемента я получаю мусор.Использовал данный метод при работе НЕ с классами ,и всё работало. :0
Функция добавления:
C++
1
2
3
4
5
int*  stack::t(int * arr,int max)
{
    max++;
    return(arr=new int[max]); 
}
Функция push:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool stack:: push(int c)
{
    if(index==max)
    {
        return false;
    }
    else
    {
        arr[index]=c;
        t(arr,max);
        index++;
        return true;
    }
}
Конструктор класса:
C++
1
2
3
4
5
6
stack(int n)
    {
        index=0;
         arr=new int[n];
         max=n;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2014, 00:34     Массив в классе
Посмотрите здесь:

Динамический массив в классе C++
C++ Массив в классе
C++ массив в классе Си++
Динам. массив в классе C++
Динамический массив в классе C++
C++ Динамический массив в классе
Динамичный массив в классе C++
Статический массив в классе C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
26.04.2014, 00:53     Массив в классе #2
Вы не допустили "ошибку новичка". Указатель это тоже тип и передается он в функцию по значению (поищете подробней сами).

C++
1
2
3
4
5
int*  stack::t(int * arr,int max)
{
    max++;
    return(arr=new int[max]); //вот здесь происходит утечка памяти
}
C++
1
2
3
4
5
int*  stack::t(int *& arr,int max)
{
    max++;
    return(arr=new int[max]); //вот здесь происходит утечка памяти
}
Заметьте я передаю указатель на начало массива по ссылке.

п.с. Дальше, судя по урывкам кода, "все нормально" (судя из работоспособности, но не "идеальности"), кроме форматирования.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
26.04.2014, 01:10     Массив в классе #3
1) Про копию указателя уже сказали
2) копировать элементы из старой памяти кто будет?
3) max - тоже копия
Yandex
Объявления
26.04.2014, 01:10     Массив в классе
Ответ Создать тему
Опции темы

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