Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2011, 01:05   #31
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Уже ведь говорили... тем что временный массив не нужен !
Код:
void v_s_a (int* &a, unsigned int s1, unsigned int s2)
{
    if (s1 < s2)
    {
        //выделяем память
        int *a2 = new int [s2];
        //переписываем значения ИЗ старого массива
        for ( unsigned int i = 0; i < s1 ; i++)
        {
            a2[i] = a[i];
        }
	//очищаем память старого массива
	delete[] a;
	a = a2;
    }
}
а разве это не то-же самое что со временным массивом?
помоему a2 и есть временный массив
SAMOUCHKA вне форума Ответить с цитированием
Старый 22.10.2011, 01:38   #32
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
а разве это не то-же самое что со временным массивом?
помоему a2 и есть временный массив
Нет. Это уже конечный массив результата. Временный только указатель на него. Посмотрите ваш код на предыдущей странице. Там у вас 2 раза new[] и 2 раза delete[] !
An1ka вне форума Ответить с цитированием
Старый 23.10.2011, 19:33   #33
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Нет. Это уже конечный массив результата. Временный только указатель на него. Посмотрите ваш код на предыдущей странице. Там у вас 2 раза new[] и 2 раза delete[] !
а что здесь delete[] a2; не надо?
SAMOUCHKA вне форума Ответить с цитированием
Старый 23.10.2011, 22:11   #34
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

внутри функции вы выдели память int a2 = new int[s2];
значит ее надо освободить внутри этой-же функции
то-есть еще одно delete надо. в книгах, вроде, так написано.
или я не прав?
SAMOUCHKA вне форума Ответить с цитированием
Старый 24.10.2011, 04:45   #35
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Так мы потом присвоили a2 к a. Т.е. эти два указателя теперь равны и указывают на один и тот же участок памяти, по этому delete можно применить к a или к a2, чтобы освободить выделенный участок памяти. Переменную a2 мы теряем - выходит из области видимости, а вот a у нас сохраняется и в последствии мы освободим выделенную память через нее.
An1ka вне форума Ответить с цитированием
Старый 24.10.2011, 19:59   #36
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

ДА ТОЧНО!!! и как я сам не додумался, во истину УКАЗАТЕЛИ МОЩНАЯ ВЕЩ!!!
SAMOUCHKA вне форума Ответить с цитированием
Старый 25.10.2011, 08:11   #37
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

В этом и есть преимущество и сила C++, в отличае от С# и Java, где нет указателей Но оборотная сторона любой силы - это большая отвественность ! Использовать указатели надо с умом, а небрежность с ними приведет к серьезным проблемам !
An1ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение всего массива RedStorm Microsoft Office Excel 2 10.04.2011 12:54
C++ - изменение размера массива kefir Помощь студентам 1 19.06.2010 11:42
Задание размерности 2мерного массива Bernarditto Общие вопросы C/C++ 2 18.06.2010 17:04
Конструктор для изменения размерности массива and277 Общие вопросы C/C++ 2 10.08.2009 20:47
увеличение размерности массива Лучик_света Общие вопросы .NET 3 25.10.2008 04:36