| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Увеличение размера динамического массива |
| Автор: Unforgiven 25.4.2007, 16:21 | ||
| Подскажите пожалуйста, как мне изменять размер динамического массива, при это не теряя данных, которые в нем находятся. Предположим:
Результатом этой программы будет: x[1]=0, x[2]=0, ... ,x[10]=10 А нужно, чтобы по-человечески получалось. |
| Автор: Rennigth 25.4.2007, 16:37 | ||
|
| Автор: Unforgiven 25.4.2007, 16:40 |
| А если, к примеру, я не знаю сколько элементов массива у меня будет? Тогда как же? |
| Автор: Rennigth 25.4.2007, 16:44 | ||
|
| Автор: artemiy 25.4.2007, 16:44 | ||
Вот добавление одного элемента
Таким образом ты можешь добавить сколько угодно элементов. |
| Автор: Unforgiven 25.4.2007, 16:48 |
| Ничего подобного. Так получается прежний результат! |
| Автор: Rennigth 25.4.2007, 16:49 |
Меня терзают смутные сомнения. Добавлено через 3 минуты и 40 секунд Unforgiven, Приводи больше кода который не работает. А так гадать в чем у тебя проблемма нехочется. Добавлено через 4 минуты и 48 секунд |
| Автор: Unforgiven 25.4.2007, 16:56 |
| А если теперь попробовать сделать таким же способом динамически изменяемый буфер в памяти. Получится ли и если да, то как? Добавлено через 1 минуту и 35 секунд Кстати, твой пример коряво работать будет, т.к. первый элемент = -1 |
| Автор: Alexeis 25.4.2007, 17:02 | ||
Все это весьма кривой способ. Изменение длинны массива таким образом очень нежелательно, так как при этом каждый раз выделяется новый буфер, в него копируются все элементы, а старый удаляется. Выделять так уже сразу на 5 элементов, а в дальнейшем изменять его длину не на 1 элемент, а на 50% его прежней длины, тогда операции выделения, освобождения памяти станут весьма редкими. |
| Автор: Unforgiven 25.4.2007, 17:05 |
| Ну то есть, грубо говоря, создать подобие структуры С++ "unsigned char* pBuffer " |
| Автор: Rennigth 25.4.2007, 17:09 | ||
Зачем? В Делфях это как я понимаю PChar. Только зачем он тебе? Объясни конкретнее что ты хочешь реализовать. |
| Автор: Unforgiven 25.4.2007, 17:11 |
| Перевожу дурацкий сишный код. А там таких структур очень много. Кроме того есть unsigned float* pBuf, short int* pBuf и т.д. Как все это нормаль перевести? |
| Автор: Rennigth 25.4.2007, 17:22 | ||
В C++ особо не силен но похоже что: unsigned float* pBuf - array of Extended; short int* pBuf - arrray of Byte; unsigned char* pBuf - PChar; (А лутше string используй чтобы не дай бог указатель не посеять) Если что поправьте. В приципе с ними со всеми типами работай как с обычными динамическими массивами. Если есть все-таки траблы, выкладывай куски кода которые не можешь перевести, кто-нить поможет. |
| Автор: Unforgiven 25.4.2007, 17:27 |
| Насколько я помню, в С++ нет такого понятия, как char. Их Char аналог нашего Byte Добавлено через 3 минуты и 5 секунд А если будут встречаться многомерные динамические массивы. Как быть? |
| Автор: Rennigth 25.4.2007, 17:38 | ||||
Сути не меняет.
Тотже самый SetLength. Многомерные массивы объявляются как array of array [и тд] of [Type] |
| Автор: Unforgiven 25.4.2007, 17:41 |
| Спасибо за помощь и потраченное на меня время |
| Автор: ilya198293 1.6.2007, 09:24 | ||
Как всё просто |
| Автор: ilya198293 1.6.2007, 12:15 |
| Хотя не всё так просто...а как копирование осуществить... если у меня есть двумерный массив, то как к его ячейке сделать присвоение данных? |
| Автор: Alexeis 1.6.2007, 13:09 |
| как и у обычного mas[i, j] либо mas[i][j]. |
| Автор: ilya198293 1.6.2007, 14:11 |
| У меня просто не правильно массив был описан, а так всё номана получилося |
| Автор: AlexxxM 1.6.2007, 16:41 | ||||||||
Динамические массивы индексируются с нуля, а ты пытаешься записать переменную за массив нужно так:
или так
|
| Автор: ilya198293 4.6.2007, 09:04 |
| А как можно отчистить массив самым простым способ инициализированный так: DebitData:array of array[1..11] of string;? При этом желательно освободить место. FreeMem что-то не догнал как работает и что нужно в ней указать. И что содержится в ячейках такого массива после задания его размерности? |
| Автор: MetalFan 4.6.2007, 11:25 | ||||
Finalize
ничего. пустые строки |
| Автор: Alexeis 4.6.2007, 11:43 |
Или DebitData := nil; |