|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.09.2010, 19:04 | #1 |
Форумчанин
Регистрация: 14.04.2010
Сообщений: 145
|
массив и указатели
Нужно выделить память под массив, у которого размер заранее не известен. как это сделать?
var i:^word; begin GetMem(i, n*sizeof(word)); end; где n - любое число не работает |
23.09.2010, 19:10 | #2 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Так ведь вроде так:
Код:
|
23.09.2010, 19:31 | #3 |
Форумчанин
Регистрация: 14.04.2010
Сообщений: 145
|
что sizeof(word), что sizeof(i) - одно и тоже
пишу так: Код:
пишу так: Код:
Incompatible types: "Integer' and 'Pointer' Dispose not supported (nor necessary) for dynamic arrays From Stilet: Неужели так сложно оформить пост красиво и читабельно? Последний раз редактировалось Stilet; 24.09.2010 в 08:07. |
23.09.2010, 20:42 | #4 |
Игрок
Форумчанин
Регистрация: 29.10.2006
Сообщений: 367
|
все правильно. ты хочешь отпустить с миром указатель, а не кусок памяти. FreeMem(i,5*sizeof(word)) тебе поможет
А вообще не вижу смысла. Динамический массив делается через SetLength(i,5); и можно забыть об указателях.
Жизнь всегда игра. Но смерть - не всегда поражение.
#define true (Math.random()>0.5) //Удачной отладки |
23.09.2010, 22:16 | #5 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Через одно место (а в TurboPascal'е по другому и никак вроде бы)
Код:
Код:
|
24.09.2010, 01:52 | #6 |
Форумчанин
Регистрация: 24.11.2006
Сообщений: 108
|
Код:
Это получится Код:
финализировать динамический массив не имеет смысла ибо он делфя его самостоятельно финализирует, как только закончится функция (исключения является глобальный массив). Код:
Код:
для того что бы в данном случае внести значение можно воспользоватся такими способами: 1) Код:
Код:
Код:
1) ты получиш набор поинтеров а не массив двордов. 2) любая динам. строка/масив имеют в памяти два дворда (левее ссылки на сам масив) в одном она хранит счетчик ссылок, а во втором размер массива. |
24.09.2010, 09:10 | #7 |
Игрок
Форумчанин
Регистрация: 29.10.2006
Сообщений: 367
|
Ребят, вы уж определитесь. Или Delphi или Pascal. И будет однозначное решение.
Жизнь всегда игра. Но смерть - не всегда поражение.
#define true (Math.random()>0.5) //Удачной отладки |
24.09.2010, 12:29 | #8 | |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Цитата:
Есть, но этот TWordArray только [0..16383], что по современным меркам может быть маловато. Если память под массив больших размеров выделить динамически, то надо использовать $R-, при этом всё равно для слишком большого константного индекса может быть out of range при компиляции. Последний раз редактировалось Somebody; 24.09.2010 в 12:31. |
|
24.09.2010, 12:35 | #9 |
Форумчанин
Регистрация: 24.11.2006
Сообщений: 108
|
Зачем больше? Это что такое нужно считать что бы массив под два гига понадобился? (по умолчанию винда все равно больше не отдаст. при желании макс 3.2 гига выделить. а дальше только 64 битный компилятор поможет.)
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++ Указатели | KLOP | Помощь студентам | 4 | 06.03.2010 20:27 |
Указатели | AquaticSoul | Общие вопросы C/C++ | 5 | 22.12.2009 15:13 |
[C] массивы, указатели, двойные указатели. | Iggel | Общие вопросы C/C++ | 5 | 05.05.2009 12:39 |
Указатели | JOFRIF | Общие вопросы C/C++ | 2 | 31.08.2008 18:34 |