1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Думал, что, судя по описанию, функция StrCopy делает полноценное копирование, то есть автоматически выделяет память под копию данных. Как оказалось, нет, копируется только указатель, то есть, если после копирования из буферной переменной её значение меняется, то меняется и "скопированная" строчка. Так как же всё-таки работать с этим странным PChar?
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.
утечек памяти нет. Если у тебя все еще продолжаются глюки - ты бы привел программу (с заданием). Глядишь, и поправили бы общими усилиями...
Да и вообще, тему по-моему пора переносить в раздел "Задачи", тут уже речь не о теории а именно о реализации.