Указатели в ТМТ Пас |
Указатели в ТМТ Пас |
AlienEmperor |
28.03.2005 14:20
Сообщение
#1
|
Бывалый Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: 0 |
Вопрос по TMT паскалю:
Есть проблема: Type TArray = Array[0..0] Of Byte; PArray = ^TArray; GetMem(P,10000); Надо привести безтиповой указатель P к виду PArray: Исправлено: PArray(P^)[Num] <-- это опечатка, не в том проблема... PArray(P)^[Num]:=N; FreeMem(P,10000); При попытке так сделать, прога вылетает к чертовой матери.... Вопрос: что не так ? В Пасе 7 все работает... Какая разница между указателями ? И если есть, то как привести указатель к нужному типу ? Сообщение отредактировано: AlienEmperor - 28.03.2005 14:40 -------------------- Все в жизни ботва... Кроме пчел!
|
volvo |
28.03.2005 14:29
Сообщение
#2
|
Гость |
Может, все-таки вот так? Код PArray(P)^[Num]:=N; { Квалификатор поправь : ) } FreeMem(P,10000); |
AlienEmperor |
28.03.2005 14:38
Сообщение
#3
|
Бывалый Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: 0 |
Я тут сам посмотрел кое-что... В общем, проблема разрешилась...
У меня была структура: ReadBMPToArray(PArray(Storage)^,.. ,...); Так вот, надо было писать: ReadBMPToArray(PArray(Storage),...,....)... Я только одного не понимаю: как это все работало в Пасе 7 ??? -------------------- Все в жизни ботва... Кроме пчел!
|
AlienEmperor |
28.03.2005 15:17
Сообщение
#4
|
Бывалый Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: 0 |
Значит так! По ходу дела имеется следующая ситуация:
в Паскале 7.0 надо писать так: Код Procedure GetImageFromFile (Var Storage:Pointer; FileName:String); Begin ReadBMPToArray(PArray(Storage^),FileName); End; Если написать так: Код Procedure GetImageFromFile (Var Storage:Pointer; FileName:String); Begin ReadBMPToArray(PArray(Storage),FileName); End; то все - краш и вылет... В ТМТ Паскале все с точностью до наоборот... Теги не забываем... Сообщение отредактировано: volvo - 28.03.2005 15:56 -------------------- Все в жизни ботва... Кроме пчел!
|
volvo |
28.03.2005 15:33
Сообщение
#5
|
Гость |
Цитата(AlienEmperor @ 28.03.05 14:17) Значит так! в Паскале 7.0 надо писать так: Procedure GetImageFromFile (Var Storage:Pointer; FileName:String); Begin ReadBMPToArray(PArray(Storage^),FileName); End; Ну, во-первых, когда Вы приводите пример, то для полноты картины неплохо бы знать, как описана ReadBmpToArray, и что именно туда передается (что такое Storage)... А то ведь я могу сделать такое определение функций, что как раз второй вариант будет работать правильно, а вот этот - просто вылетит... Так что будьте корректнее... |
AlienEmperor |
28.03.2005 15:42
Сообщение
#6
|
Бывалый Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: 0 |
Procedure ReadBMPToArray (Var Image:PArray; FileName:string);
Begin End; -------------------- Все в жизни ботва... Кроме пчел!
|
volvo |
28.03.2005 15:48
Сообщение
#7
|
Гость |
Ну в таком случае - просто попробуйте запустить программу из аттача (под TP разумеется), убедиться что она работает правильно (хотя и не должна, судя по сообщению в посте №4), а потом добавить символ ^ и посмотреть на результаты... При использовании в процедурах более сложных действий вылет при использовании ^ очень вероятен...
Прикрепленные файлы _EMPRR_.PAS ( 490 байт ) Кол-во скачиваний: 183 |
AlienEmperor |
28.03.2005 16:08
Сообщение
#8
|
Бывалый Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: 0 |
Так... Я, кажется, еще кое во что въехал...
У меня массив описан как: TArray = Array[0..0] Of Byte; В аттаче я нашел такую запись: TArray = Array[0..65535] Of Byte; PArray:=TArray; Я писал 0..0 для "неограниченного" массива... Хотя максимум в таком случае все равно определяется 65535... На самом деле, без ^ выглядит более естественно... Вообще-то логически так и должно быть, че меня глючило при написании ? Во как! Все, разобрался! У меня было два глюка в ТП проге: накладываясь друг на друга, они давали, как ни странно, правильный результат! Volvo, спасибо! Блин... так бы фиг заметил... Сообщение отредактировано: AlienEmperor - 28.03.2005 16:12 -------------------- Все в жизни ботва... Кроме пчел!
|
Текстовая версия | 28.04.2024 13:08 |