Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как перевыделить память у new ? ??? 
V
    Опции темы
Syberex
Дата 8.12.2006, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 15.9.2006
Где: Украина

Репутация: нет
Всего: нет



необходимо после применения оператора new , увеличить объём массива, как это сделать не прибегая к сосданию второго массива больше первого и копирования содержимого, в функции alloc  есть  realloc, а в new есть что-то подобное?
--------------------
whole power in artificial intelligences
PM MAIL ICQ   Вверх
EvgenZ
Дата 8.12.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11





--------------------
<удалено администрацией форума>
PM MAIL   Вверх
Alexeis
Дата 8.12.2006, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Syberex, Если писать на билдере то динамические массивы создаваемые при помощи шаблона 
template <class T> class DELPHIRETURN DynamicArray; берут эту работу на себя.
Если использовать STL то есть шаблон Vector который тоже берет работу по удлиннению массива на себя.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Syberex
Дата 8.12.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 15.9.2006
Где: Украина

Репутация: нет
Всего: нет



не хочу я этих надстроек, хочу низкоуровневое распределение.

Добавлено @ 10:53 
все эти стл памяти хавают немерено и не следят да собой, поэтому хочу что-то вроде realloc  для new
--------------------
whole power in artificial intelligences
PM MAIL ICQ   Вверх
Kuvaldis
Дата 8.12.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



Syberex, 
Цитата

все эти стл памяти хавают немерено и не следят да собой, поэтому хочу что-то вроде realloc  для new

Голословное заявление.
Если бы это было так, то  системном программировании сии конструкции бы не использовали smile 

Если знаешь такого дядьку как Страуструп, то должен прислушаться к его мнению:
1.6.1 Рекомендации для программистов на С
...
[3] Не используйте malloc(). Оператор new делает то же самое лучше.  Вместо realloc() пользуйтесь vector.
...

Это последнее, 3 издание его главной книжки  smile 


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Syberex
Дата 8.12.2006, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 15.9.2006
Где: Украина

Репутация: нет
Всего: нет



vector медленно работает
--------------------
whole power in artificial intelligences
PM MAIL ICQ   Вверх
Mayk
Дата 8.12.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Syberex @  8.12.2006,  14:49 Найти цитируемый пост)

все эти стл памяти хавают немерено и не следят да собой, поэтому хочу что-то вроде realloc  для new

Вот как раз STL'овские контейнеры следят за собой. А вот на выделенный new'ом блок кто-то должен сделать delete.

Добавлено @ 12:44 
Цитата(Syberex @  8.12.2006,  16:33 Найти цитируемый пост)
vector медленно работает 

Не медленнее обычного массива. Особенно при включенной оптимизации. 
А если хочется предотвратить копирования туда-сюда, то есть такая вещь как reserve.
Код

      /**
       *  @brief  Attempt to preallocate enough memory for specified number of
       *          elements.
       *  @param  n  Number of elements required.
       *  @throw  std::length_error  If @a n exceeds @c max_size().
       *
       *  This function attempts to reserve enough memory for the
       *  %vector to hold the specified number of elements.  If the
       *  number requested is more than max_size(), length_error is
       *  thrown.
       *
       *  The advantage of this function is that if optimal code is a
       *  necessity and the user can determine the number of elements
       *  that will be required, the user can reserve the memory in
       *  %advance, and thus prevent a possible reallocation of memory
       *  and copying of %vector data.
       */
      void
      reserve(size_type __n);




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
codelord
Дата 8.12.2006, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



а может сделать финт конем  smile 
Код

#include <iostream>
#include <new>
using namespace std;
int main()
{
    double *p = new double[100];
    double *j = new double[200]; //сколько там надо памяти добавить :)
    *(p+100)=*j; // теперь можно обращаться скажем p[250]
    return 0;
}



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Mayk
Дата 8.12.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(codelord @  8.12.2006,  16:55 Найти цитируемый пост)
*(p+100)=*j; // теперь можно обращаться скажем p[250]

Это эквивалентно p[100]=j[0].
А это не многим отличается от p[-14265]=j[0].
Так как под 101-ый элемент памяти не выделено.

Это сообщение отредактировал(а) Mayk - 8.12.2006, 13:07


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Sartorius
Дата 8.12.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



Цитата

теперь можно обращаться скажем p[250]


Ты думаешь ты так два участка памяти склеил? smile 
PM MAIL ICQ   Вверх
Fazil6
Дата 8.12.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Код

 *(p+100)=*j; // теперь можно обращаться скажем p[250]

мда... гениально...
нет слов, действительно финт.
PM MAIL   Вверх
codelord
Дата 8.12.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



Цитата(Mayk @  8.12.2006,  09:06 Найти цитируемый пост)
Это эквивалентно p[100]=j[0].А это не многим отличается от p[-14265]=j[0].Так как под 101-ый элемент памяти не выделено.

это лишь желание развернуться на пустом месте. т.к. хочет автор.
Ничто не мешает если не нравится 101 элемент указвыать на последний, т.е. 100 (хотя у меня компилит и ошибок вроде не выдает VS2005). 

А кто там говорит про гениальность пусть предлагает свои варианты. Без слов.



Цитата(Sartorius @  8.12.2006,  09:12 Найти цитируемый пост)
Ты думаешь ты так два участка памяти склеил?

нет smile всего лишь использовал доп пространство.



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Fazil6
Дата 8.12.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

А кто там говорит про гениальность пусть предлагает свои варианты. Без слов.

уже предложили std::vector
А то что ты написал - бред


PM MAIL   Вверх
Sartorius
Дата 8.12.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



codelord,  это тебе так повезло, что оба массива расположились один за другим и Access violation поэтому нет, но этого же никто не гарантирует....

PM MAIL ICQ   Вверх
codelord
Дата 8.12.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



Цитата(Fazil6 @  8.12.2006,  10:05 Найти цитируемый пост)
уже предложили std::vectorА то что ты написал - бред

ты считаешь, что ты решаешь как надо автору топика?
Он уже сказал что vector ему не нужен.
По поводу бреда, не стоит выражаться.
Цитата(Sartorius @  8.12.2006,  10:06 Найти цитируемый пост)
codelord,  это тебе так повезло, что оба массива расположились один за другим и Access violation поэтому нет, но этого же никто не гарантирует....

да причем здесь как они расположились.
это выходи программе везет сколько раз запускаю столько раз работает, что нет ни у кого студии под рукой.

p.s. никому я не навязываю свое мнение,
И НЕ НАДО ЭТО ДЕЛАТЬ МНЕ!



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0764 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.