The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Динамический массив"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Динамический массив" 
Сообщение от sandy emailИскать по авторуВ закладки(ok) on 23-Сен-05, 21:03  (MSK)
Есть массив

char** array;
array=new char*[10];

Могу ли я его увеличить, не повреждая хранящихся в нем данных?

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Динамический массив" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 23-Сен-05, 21:48  (MSK)
>Есть массив
>
>char** array;
>array=new char*[10];
>
>Могу ли я его увеличить, не повреждая хранящихся в нем данных?

Можно скопировать в новый массив. Увеличить размер существующего нельзя.
И вообще подобная конструкция дурно пахнет - утечками памяти, например.
STL forever и всё такое.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Динамический массив" 
Сообщение от chip emailИскать по авторуВ закладки(ok) on 24-Сен-05, 09:46  (MSK)
>Есть массив
>
>char** array;
>array=new char*[10];
>
>Могу ли я его увеличить, не повреждая хранящихся в нем данных?

можно использовать realloc():

The realloc() function changes the size of the previously allocated mem-
ory referenced by ptr to size bytes.  The contents of the memory are
unchanged up to the lesser of the new and old sizes.  If the new size is
larger, the value of the newly allocated portion of the memory is unde-
fined.  If the requested memory cannot be allocated, NULL is returned and
the memory referenced by ptr is valid and unchanged.  If memory can be
allocated, the memory referenced by ptr is freed and a pointer to the
newly allocated memory is returned.  Note that realloc() and reallocf()
may move the memory allocation resulting in a different return value than
ptr.  If ptr is NULL, the realloc() function behaves identically to
malloc() for the specified size.

Однако, для CPP более красивое решение указал DeadMustdie


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Динамический массив" 
Сообщение от sas emailИскать по авторуВ закладки(??) on 24-Сен-05, 11:18  (MSK)
>>Есть массив
>>
>>char** array;
>>array=new char*[10];
>>
>>Могу ли я его увеличить, не повреждая хранящихся в нем данных?
>
>можно использовать realloc():
>
>The realloc() function changes the size of the previously allocated mem-
>ory referenced by ptr to size bytes.  The contents of the
>memory are
>unchanged up to the lesser of the new and old sizes.  
>If the new size is
>larger, the value of the newly allocated portion of the memory is
>unde-
>fined.  If the requested memory cannot be allocated, NULL is returned
>and
>the memory referenced by ptr is valid and unchanged.  If memory
>can be
>allocated, the memory referenced by ptr is freed and a pointer to
>the
>newly allocated memory is returned.  Note that realloc() and reallocf()
>may move the memory allocation resulting in a different return value than
>
>ptr.  If ptr is NULL, the realloc() function behaves identically to
>
>malloc() for the specified size.
>
>Однако, для CPP более красивое решение указал DeadMustdie

Malen'koe utochnenie: Reshenie s realloc trebuet ne ispol'zovat' operatori new/delete, a funkcii C dlya videlenia pamjati.

Udachi
--- sas

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Динамический массив" 
Сообщение от sandy emailИскать по авторуВ закладки(??) on 26-Сен-05, 11:24  (MSK)
>Malen'koe utochnenie: Reshenie s realloc trebuet ne ispol'zovat' operatori new/delete, a funkcii
>C dlya videlenia pamjati.

В том то и дело, что в программе еже задействованы операторы new/delete, и лень, знаете ли, переписывать это на С.
Кроме того, этот массив - член структуры, а структура - член вектора. Была мысль воспользоваться вектором. Но получается что-то вроде этого:

struct STR {
/*  */
std::vector<char*> v;
// char** v; // альтернативный вариант
};

std::vector<STR> sv(10);

В случае с массивом (определить его размер) просто:
sv[0].v=new char*[10];

А вот sv[0].v.resize(10); - не получается пока

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Динамический массив" 
Сообщение от Profic Искать по авторуВ закладки on 27-Сен-05, 04:21  (MSK)
std::vector<std::string> sv(10);
?
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Динамический массив" 
Сообщение от sandy emailИскать по авторуВ закладки(??) on 27-Сен-05, 10:37  (MSK)
>std::vector<std::string> sv(10);
>?

Допустим. Тогда:
struct STR {
/*  */
std::vector<std::string>sv;
};

std::vector<STR> sv(10);

Размер вектора заранее не известен
Увеличить его конструкцией: sv[0].v.resize(10); не получается

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Динамический массив" 
Сообщение от sas emailИскать по авторуВ закладки(??) on 28-Сен-05, 03:33  (MSK)
>>std::vector<std::string> sv(10);
>>?
>
>Допустим. Тогда:
>struct STR {
>/*  */
>std::vector<std::string>sv;
>};
>
>std::vector<STR> sv(10);
>
>Размер вектора заранее не известен
>Увеличить его конструкцией: sv[0].v.resize(10); не получается  

Prochitojte documentaciju po vectoru i vse stanet yasno.

Udachi
--- sas


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Динамический массив" 
Сообщение от sinus Искать по авторуВ закладки(??) on 28-Сен-05, 01:16  (MSK)
>Есть массив
>
>char** array;
>array=new char*[10];
>
>Могу ли я его увеличить, не повреждая хранящихся в нем данных?

НОРМАЛЬНЫХ решиний только два:
1 односвязный\многосвязный список
2 STL (vector,list...)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру