Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Char & Error


NiceSC ©   (2004-06-23 01:53:00) 

type
  SetOfChars = Set of Char;
var
setChar:setofchars;
begin
...
setChar:=[ #10..#13]; // строкаС
...
Если не убрать строкуС, то при выходе из основной процедуры возникает ошибка и программа падает???


SPeller   (2004-06-26 07:08:00) [1]

Ну вот видишь. Никогда не теряй указатели на память, потом освобождать ведб надо. А вот на счет выделения - так я по полтора гигабайта выделял GetMem'ом, чтобы создать нехватку памяти и сброс остальных прог в своп. Но это уже оффтопик :)


nicesc   (2004-06-25 23:34:00) [2]

Gandalf
Всё парни приношу свои извенения, разобрался, уки кривые, не давала освободить правильно память команда:
StrTemp:=@StrTemp[iTag];


Gandalf   (2004-06-25 22:03:00) [3]

У меня все гуд. KOL 1.91 Delphi 7 WinXP SP1 RUS
А все же мне Freemem(MyStr,10); больше по вкусу.


nicesc   (2004-06-25 21:45:00) [4]

Да я для примера привёл!

Ну например создаю проект, новый
и выделяю память и тут же её высвобождаю:
begin
 Getmem(MyStr,10);
 Freemem(MyStr) // RunTime
end;
Проверьте именно на PChar!
Кол 1.85
с заменой system


Gandalf   (2004-06-25 21:15:00) [5]

Либо у меня браузер глючит, либо что. У тебя код в кустах... если ты выделил 10 байт и работаешь с 1000 то у тебя точно будут проблемы. По коду не ясно...


nicesc   (2004-06-25 00:36:00) [6]

Решил проблему (спасибо ZX)
делать надо так:


var
 p:pointer;
 strTemp:PChar;
begin
 GetMem(P,strLen);
 strTemp:=PChar(p);
...
...
 FreeMem(P)


Почему такие проблемы с PCHAR???
У меня не работает даже такой код:
Getmem(MyStr,10);
Freemem(MyStr); // -> RunTime error 204


nicesc   (2004-06-24 23:22:00) [7]

Пробовал и так, пишет Runtime error 204 at 0040244C


SPeller   (2004-06-24 20:22:00) [8]

Не надо ничего уменьшать. Один раз выделил по максимуму и используешь. А когда не надо — просто FreeMem( strTemp );


nicesc   (2004-06-24 15:02:00) [9]

Вот докопался, при попытке освободить память, вываливается Error
FreeMem(strTemp,SizeOf(strTemp)-1);
Это строка типа PChar которая динамически уменьшается в процессе...
Память выделял Так: GetMem(strTemp,StrLen(strWork));


Gandalf   (2004-06-23 23:58:00) [10]

кода мало


savva   (2004-06-23 12:57:00) [11]

вообще то я не знаю что написанное вами означает, потому как описав множество Set of Charвы описали тип, возможными которого могут быть значения с #0 до #255.
И если  строкой setChar:=[ #10..#13];Вы хотите добавить в переменную типа SetOfChars 3 значения, то я советую Вам использовать для этого операции вида
setChar := [];
setChar := setChar + [ #10];

или же проседуру Include (она вроде более эффективна).

Маленький кусочек из F1.
Excludeprocedure
Removes an element from a set.

Includeprocedure
Adds an element to a set.


Alex44   (2004-06-23 11:27:00) [12]

Mozhno popodrobnee? setChar---eto ne stroka, a set (v dannom sluchae---prosto 256 bits = 32 bytes)! Mozhet, ne nuzhno pytat'sya ee k stroke privodit'?


Наверх

Титульная страница Поиск, карта сайта Написать письмо