1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Как надо написать в var'e, когда необходимо выделить некоторое количество ячеек для массива?
Код
var a:array[1..?] of integer; ...
write('kakoe koli4estvo simvolov bydet v massive'); readln(n);
for i:=1 to n do {zapolnenie masiva lyubym sposobom}
Если место ? написать n, вылетает ошибка, тогда что должно быть место вопросительного занка? Нельзя же просто писать максимальную цифру от фонаря, типа 9999?
Все таки интересно, что это значит ? Цитата "Процедура FreeMem( var p: Pointer; size: Word ) освобождает участок памяти, адрес начала которого определен указателем p, а размер - параметром size. Значение указателя p становится неопределенным."
Это значит только одно: Как только тебе не нужна больше память, адресуемая указателем P (закончил ты работать с этой переменной, нужно ее удалить), ты ее удаляешь вызовом процедуры FreeMem При этом разрушается связь между ранее выделенной памятью и указателем. Указатель (как пишется в большинстве книг) становится НЕвалидным. Если ты после вызова FreeMem(p, {размер_переменной}); попытаешься вновь обратиться к P^, тебя ждет сюрприз - программа с большой степенью вероятности выбросит тебе Segmentation Fault (пока не спрашивай, что это, если потом где встретишься и заинтересуешься - расскажу. "На сейчас" - рассматривай это как аварийное завершение работы программы), а даже если этого и не произойдет - результатам ее работы все равно доверять нельзя. Поэтому еще одно замечание: ВСЕГДА, после того как вызвал FreeMem, добавь еще одну строку в программу:
FreeMem(p, {размер_переменной}); p := nil; { <--- Вот эту !!! }
, тогда программа у тебя гарантированно вылетит при попытке обратиться к освобожденной уже памяти (по ошибке, например, мало ли что). Это лучше, чем псевдоправильные результаты...