Вопрос по 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 все работает... Какая разница между указателями ? И если есть, то как привести указатель к нужному типу ?
Может, все-таки вот так?
Я тут сам посмотрел кое-что... В общем, проблема разрешилась...
У меня была структура: ReadBMPToArray(PArray(Storage)^,.. ,...);
Так вот, надо было писать: ReadBMPToArray(PArray(Storage),...,....)...
Я только одного не понимаю: как это все работало в Пасе 7 ???
Значит так! По ходу дела имеется следующая ситуация:
в Паскале 7.0 надо писать так:
Procedure ReadBMPToArray (Var Image:PArray; FileName:string);
Begin
End;
Ну в таком случае - просто попробуйте запустить программу из аттача (под TP разумеется), убедиться что она работает правильно (хотя и не должна, судя по сообщению в посте №4), а потом добавить символ ^ и посмотреть на результаты... При использовании в процедурах более сложных действий вылет при использовании ^ очень вероятен...
Прикрепленные файлы
_EMPRR_.PAS ( 490 байт )
Кол-во скачиваний: 399
Так... Я, кажется, еще кое во что въехал...
У меня массив описан как: TArray = Array[0..0] Of Byte;
В аттаче я нашел такую запись: TArray = Array[0..65535] Of Byte;
PArray:=TArray;
Я писал 0..0 для "неограниченного" массива... Хотя максимум в таком случае все равно определяется 65535...
На самом деле, без ^ выглядит более естественно... Вообще-то логически так и должно быть, че меня глючило при написании ?
Во как! Все, разобрался! У меня было два глюка в ТП проге: накладываясь друг на друга, они давали, как ни странно, правильный результат!
Volvo, спасибо! Блин... так бы фиг заметил...