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

> 

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Указатели в ТМТ Пас
сообщение
Сообщение #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 -


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






blink.gif
Может, все-таки вот так?
Код
PArray(P)^[Num]:=N; { Квалификатор поправь : ) }
FreeMem(P,10000);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

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

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


Я тут сам посмотрел кое-что... В общем, проблема разрешилась...
У меня была структура: ReadBMPToArray(PArray(Storage)^,.. ,...);
Так вот, надо было писать: ReadBMPToArray(PArray(Storage),...,....)...
Я только одного не понимаю: как это все работало в Пасе 7 ???


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата(AlienEmperor @ 28.03.05 14:17)
Значит так!
в Паскале 7.0 надо писать так:
Procedure GetImageFromFile (Var Storage:Pointer; FileName:String);
Begin
ReadBMPToArray(PArray(Storage^),FileName);
End;


Ну, во-первых, когда Вы приводите пример, то для полноты картины неплохо бы знать, как описана ReadBmpToArray, и что именно туда передается (что такое Storage)... А то ведь я могу сделать такое определение функций, что как раз второй вариант будет работать правильно, а вот этот - просто вылетит...

Так что будьте корректнее...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
***

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

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


Procedure ReadBMPToArray (Var Image:PArray; FileName:string);
Begin
End;


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Ну в таком случае - просто попробуйте запустить программу из аттача (под TP разумеется), убедиться что она работает правильно (хотя и не должна, судя по сообщению в посте №4), а потом добавить символ ^ и посмотреть на результаты... При использовании в процедурах более сложных действий вылет при использовании ^ очень вероятен...


Прикрепленные файлы
Прикрепленный файл  _EMPRR_.PAS ( 490 байт ) Кол-во скачиваний: 396
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Бывалый
***

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

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


Так... Я, кажется, еще кое во что въехал...
У меня массив описан как: TArray = Array[0..0] Of Byte;

В аттаче я нашел такую запись: TArray = Array[0..65535] Of Byte;
PArray:=TArray;

Я писал 0..0 для "неограниченного" массива... Хотя максимум в таком случае все равно определяется 65535...
На самом деле, без ^ выглядит более естественно... Вообще-то логически так и должно быть, че меня глючило при написании ?

Во как! Все, разобрался! У меня было два глюка в ТП проге: накладываясь друг на друга, они давали, как ни странно, правильный результат!

Volvo, спасибо! Блин... так бы фиг заметил...

Сообщение отредактировано: AlienEmperor -


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 28.03.2024 17:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name