Есть массивchar** array;
array=new char*[10];Могу ли я его увеличить, не повреждая хранящихся в нем данных?
>Есть массив
>
>char** array;
>array=new char*[10];
>
>Могу ли я его увеличить, не повреждая хранящихся в нем данных?Можно скопировать в новый массив. Увеличить размер существующего нельзя.
И вообще подобная конструкция дурно пахнет - утечками памяти, например.
STL forever и всё такое.
>Есть массив
>
>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
>>Есть массив
>>
>>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 более красивое решение указал DeadMustdieMalen'koe utochnenie: Reshenie s realloc trebuet ne ispol'zovat' operatori new/delete, a funkcii C dlya videlenia pamjati.
Udachi
--- sas
>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); - не получается пока
std::vector<std::string> sv(10);
?
>std::vector<std::string> sv(10);
>?Допустим. Тогда:
struct STR {
/* */
std::vector<std::string>sv;
};std::vector<STR> sv(10);
Размер вектора заранее не известен
Увеличить его конструкцией: sv[0].v.resize(10); не получается
>>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
>Есть массив
>
>char** array;
>array=new char*[10];
>
>Могу ли я его увеличить, не повреждая хранящихся в нем данных?НОРМАЛЬНЫХ решиний только два:
1 односвязный\многосвязный список
2 STL (vector,list...)