IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> адрес указателя, вызвать ошибку..
compiler
сообщение 27.05.2007 14:01
Сообщение #1


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Хотелось бы написать программку которая вызывала ошибку в распределении памяти...
для этого я хочу написать 3 проги . первая - читает число(в указатель), адрес указателя пишет в файл, ждет действия второй програмки(которая будет пытаться прочитать/изменить значения указателя) и печатает это же число.
первую програмку я то написал но с ошибками
var
p : ^integer;
ad: integer;
f :file of integer;
begin
Assign(f,'file.txt');
Rewrite(f);

New(p);
readln(p^);

ad:=Addr(p); //ошибка, можна конечно прать отдельно сигмент и сдвиг но это не то...
write(f, ad);

Close(f);

(*readln; read;*)
while IOResult = 0 //замена, пока файл не удален другой программой,
do {$I-} Reset(f); {$I+} //будем надеятся у нее это получится


writeln(p^);

readln;
read;
end.


заранее благодарен.

добавлено (вторая программа+в первой уничтожена одна переменная)
var
p : ^integer;
f :file of integer;
begin
Assign(f,'file.txt');
Reset(f);

New(p);
read(f, p);

Erase(f);
end.



Сообщение отредактировано: compiler - 27.05.2007 15:12


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 27.05.2007 14:08
Сообщение #2


Гость






ad:=Integer(Addr(p));

(только если ты уверен, что SizeOf(Pointer) = SizeOf(Integer) на твоем компиляторе)

Добавлено через 1 мин.
Только вот сдается мне, что ты получишь Access Violation wink.gif
 К началу страницы 
+ Ответить 

Сообщений в этой теме
compiler   адрес указателя   27.05.2007 14:01
volvo   ad:=Integer(Addr(p)); (только если ты уверен, что ...   27.05.2007 14:08
compiler   [code=pas]ad:=Integer(Addr(p));(только если ты уве...   27.05.2007 14:14
volvo   Что значит "все равно ошибка"? То, что я...   27.05.2007 14:23
compiler   Что значит "все равно ошибка"? прости, п...   27.05.2007 14:31
volvo   WriteLn(SizeOf(Integer)); { <--- Мне выдает 4 ...   27.05.2007 15:53
compiler   WriteLn(SizeOf(Integer)); { <--- Мне выдает 4 }...   27.05.2007 16:45
volvo   Ничего не надо спрашивать... Я и так тебе скажу: э...   27.05.2007 16:51
compiler   Ничего не надо спрашивать... Я и так тебе скажу: ...   27.05.2007 17:06
volvo   Не знаю, мне при {$mode ObjFPC} тоже дает Siz...   27.05.2007 17:14
compiler   Не знаю, мне при {$mode ObjFPC} тоже дает Siz...   27.05.2007 17:18
volvo   [b]Appendix D D.3 Delphi mode ... 5. The Objpas u...   27.05.2007 17:37
compiler   размер Pointer, как я теперь понял 4 поэтому буду ...   27.05.2007 17:45
compiler   а как присвоить адрес указателю? var p : ^longin...   27.05.2007 19:20
volvo   Ты можешь мне объяснить, ЧЕГО ты хочешь добиться??...   27.05.2007 21:48
compiler   Ты можешь мне объяснить, ЧЕГО ты хочешь добиться??...   28.05.2007 12:25
-compiler-   собственно подозрительный этот кусок,{$I-} w...   28.05.2007 13:08


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 10:10
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"