1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
| Ldnb |
11.05.2010 4:56
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
Думал, что, судя по описанию, функция StrCopy делает полноценное копирование, то есть автоматически выделяет память под копию данных. Как оказалось, нет, копируется только указатель, то есть, если после копирования из буферной переменной её значение меняется, то меняется и "скопированная" строчка.
Так как же всё-таки работать с этим странным PChar? |
![]() ![]() |
| volvo |
12.05.2010 1:18
Сообщение
#2
|
|
Гость |
Хм... Вот так:
uses strings;
var
s: array[0 .. 79] of char;
p, pp, p1, p2: Pchar;
begin
writeln(memavail); { <--- потом сравним, сколько памяти было и сколько осталось }
readln(s);
P := strnew(s);
pp := strnew(s);
p2 := strcat(pp, strnew(p));
p[3] := '8'; { Проверка, действительно ли создается копия строки P }
writeln('p = ', p);
writeln('p2 = ', p2);
strdispose(p2); { <--- Удалять ТОЛЬКО P2, строку PP удалять не надо, она "внутри" P2 }
strdispose(p);
writeln(memavail); { <--- Сравниваем с ранее напечатанным числом }
end.
утечек памяти нет. Если у тебя все еще продолжаются глюки - ты бы привел программу (с заданием). Глядишь, и поправили бы общими усилиями...Да и вообще, тему по-моему пора переносить в раздел "Задачи", тут уже речь не о теории а именно о реализации. |
Ldnb Как скопировать строку PChar ? 11.05.2010 4:56
TarasBer Перед StrCopy надо заранее выделить память (длина ... 11.05.2010 10:12
Ldnb К сожалению, надо на Турбо Паскале... ;(
Можно м... 11.05.2010 10:32
TarasBer > К сожалению, надо на Турбо Паскале... ;(
Зад... 11.05.2010 10:43
volvo Правильно копировать строку, предварительно прочит... 11.05.2010 13:04
TarasBer
:dry: "Плохому танцору... " (С) Народн... 12.05.2010 10:03
Ldnb Спасибо!
А правильно добавить строку p2 к стр... 11.05.2010 18:17
volvo А как потом освобождать память в таком случае? 11.05.2010 23:09
Ldnb А как правильно? :( Подскажите, пожалуйста.
В общ... 12.05.2010 0:16
Ldnb Так...значит, всё-таки операция strcat(pp, strnew(... 12.05.2010 1:37
volvo Так не пойдет, будет утечка памяти.
uses strings;... 12.05.2010 11:58
TarasBer
Так не пойдет, будет утечка памяти.
Что я делаю... 12.05.2010 12:56
Ldnb :blink: :blink: :blink: :blink: :blink: :blin... 13.05.2010 19:41
volvo Ты читать умеешь?
Все, дальше можешь ничего не дел... 13.05.2010 21:12
Ldnb За поправление спасибо, учтём, но меня интересует ... 14.05.2010 0:11
Ldnb Эх... видимо нормально работать с PChar всё-таки н... 15.05.2010 8:06![]() ![]() |
|
Текстовая версия | 15.11.2025 9:29 |