Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизЗаполнение буфера Найти похожие ветки
← →
Destroyer © (2006-07-21 17:58) [0]Надо заполнить буфер произвольными числами. Делаю так:
var
buf : array[1..4096] of Byte;
Rand_dig: integer;
for i:=0 to SizeOf(buf) do
begin
Rand_dig:=Random(1000);
FillChar(buf, 1, Rand_dig);
end;
Произвольное число записывается в первый элемент. А надо заполнить весь буфер произвольными. Может есть функция установки позиуии записи, или еще как?
← →
DrPass © (2006-07-21 18:00) [1]for i:=1 to SizeOf(buf) do
buf[i]:=Random(256);
← →
Loginov Dmitry © (2006-07-21 20:09) [2]> Надо заполнить буфер произвольными числами
var
Buf: PByteArray;
begin
GetMem(Buf);
...
Все. Буфер заполнен произвольными числами.
← →
KilkennyCat © (2006-07-21 21:32) [3]> [2] Loginov Dmitry © (21.07.06 20:09)
негарантированно.
← →
Loginov Dmitry © (2006-07-21 21:38) [4]> негарантированно.
Ну если в общем случае, то в буфере могут быть совершенно произвольные "числа"
← →
KilkennyCat © (2006-07-21 21:52) [5]Ага. Это как переменная, на которую компилятор ругается "может быть неинициализирована". В общем случае работает, но может и сглючить. Нафига алгоритм, который может сглючить?
← →
Ketmar © (2006-07-21 22:33) [6]почему "сглючить"? если подходить формально, то там будут именно произвольные значения. нигде же не сказано, что хочется именно псевдослучайных?
зыж да, я буквоед. %-)
ззыж GetMem(buf, bufSize). %-)
← →
XeON © (2006-07-21 23:44) [7]А исключения сделать не судьба? Try Except? Если сглючил - тады алгорытм №2! И т.д... :)
← →
KilkennyCat © (2006-07-21 23:51) [8]> если подходить формально, то там будут именно произвольные
> значения
там будет ОДНО ЗНАЧЕНИЕ.
> А исключения сделать не судьба?
А оно будет вызвано?
Я имел ввиду, что вариант [2] может попасть на чистую, или заполненную одним значением область памяти.
← →
Ketmar © (2006-07-21 23:59) [9]>KilkennyCat © (21.07.06 23:51) [8]
пусть себе попадает. это тоже произвольные, хоть и одинаковые значения. "нес па?" (ц)
← →
KilkennyCat © (2006-07-22 00:03) [10]> [9] Ketmar © (21.07.06 23:59)
ну-ну...
← →
DrPass © (2006-07-22 01:33) [11]Смотрите на телеэкранах новый суперблокбастер "Буквоед-2: The Return of Буквоед"
← →
Loginov Dmitry © (2006-07-22 08:28) [12]> ззыж GetMem(buf, bufSize).
Забыл :(
> А исключения сделать не судьба? Try Except? Если сглючил
> - тады алгорытм №2!
Зачем их делать? Они сами возникнут при жестокой необходимости ;)
> там будет ОДНО ЗНАЧЕНИЕ.
Да вы что? И какое же, может и это знаете?
> Я имел ввиду, что вариант [2] может попасть на чистую, или
> заполненную одним значением область памяти.
Вариант 2 вообще не рабочий. Без указания размера буфера функцию GetMem не следует использовать.
> ну-ну...
ну-ну...
← →
KilkennyCat © (2006-07-22 08:42) [13]> Да вы что? И какое же, может и это знаете?
Откуда мне знать что там было? FF FF FF или 00 00 00 00... или еще что-то...
> Вариант 2 вообще не рабочий. Без указания размера буфера
> функцию GetMem не следует использовать.
Мне сие не важно. Я не разбирал непосредственно исполнение, я обсуждал саму идею использование "мусора" в памяти, как заполнитель произвольными значениями. А поставили ли Вы точку с запятой, или размер буфера не указали, это, извините, не моего ума дело.
← →
Loginov Dmitry © (2006-07-22 08:49) [14]> я обсуждал саму идею использование "мусора" в памяти, как
> заполнитель произвольными значениями
Так а в чем проблема? Если числа должны иметь порядковый тип, то все нормально. В [0] же не было сказано, что буфер должен быть заполнен случайными числами, а с GetMem произвольность гарантируется, так как Х.З. что там в результате окажется.
← →
KilkennyCat © (2006-07-22 08:54) [15]> В [0] же не было сказано, что буфер должен быть заполнен
> случайными числами
Согласен. Предположение о "случайных" можно сделать исходя из приведенного кода и телепатии :), сто имелось ввиду под "произвольными".
> с GetMem произвольность гарантируется, так как Х.З. что
> там в результате окажется.
С точки зрения "буквоедства", да, согласен. Но мы же не "буквоеды" :))
← →
Loginov Dmitry © (2006-07-22 09:58) [16]Однако мы нафлудили :))
Если по сабжу, то:
for I := Low(Buf) to High(Buf) do
Buf[I] := Random(High(Byte));
← →
Ketmar © (2006-07-22 10:33) [17]>Loginov Dmitry © (22.07.06 09:58) [16]
так это... в [1] решение уже дано, потому можно было флудить смело. %-)
хотя решение [16] более общее, конечно. %-)
← →
Loginov Dmitry © (2006-07-22 14:08) [18]> хотя решение [16] более общее, конечно
Ну типа да. SizeOf дает размер массива в байтах, и для элементов, отличных от Byte не подходит. (Это я счас проверил, а когда писал [17], почему-то думал, что SizeOf возвратит 1).
← →
Virgo_Style © (2006-07-22 17:09) [19]Прочитав переписку, задался вопросом - а как можно было бы выделить буфер, чтобы он не был заполнен (произвольными) числами?)
Ежели он не строковый и не оcharованный?)
← →
Шпиён (2006-07-22 17:14) [20]
> Virgo_Style © (22.07.06 17:09) [19]
> Прочитав переписку, задался вопросом - а как можно было
> бы выделить буфер, чтобы он не был заполнен (произвольными)
> числами?)
Нарпимер, так:
function AllocMem(Size: Cardinal): Pointer;
AllocMem allocates a block of the given size on the heap. Each byte in the allocated buffer is set to zero.
← →
Zeqfreed © (2006-07-22 17:21) [21]Или
GlobalAlloc
с флагом GMEM_ZEROINIT (кажется так).
← →
Virgo_Style © (2006-07-22 22:03) [22]Шпиён (22.07.06 17:14) [20]
Zeqfreed © (22.07.06 17:21) [21]
см. [9] :-)
← →
Zeqfreed © (2006-07-22 22:06) [23]> [22] Virgo_Style © (22.07.06 22:03)
Не понял, зачем мне туда смотреть. Я отвечал на [19]. GlobalAlloc(GMEM_ZEROINIT, …) выделит область памяти и заполнит её нулями, т.е. область, не заполненную произвольными числами.
← →
Destroyer © (2006-07-27 22:35) [24]Спасибо за информацию. Заполнить всяким мусором буфер можно так
for i:=1 to SizeOf(buf) do
buf[i]:=Random(256);
Но если это приходится делать в цикле не одну сотню раз, и если буфер большой, то, видимо, для увеличения скорости проще взять:var
Buf: PByteArray;
begin
GetMem(buf, bufSize);
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.044 c