LINUX.ORG.RU

какой то бред с pointerами

 


0

1

есть такие типы данных

module data_types

type cParticle
	real(4) :: v(3),r0(2),rS(3),r1(2),SinA,CosA
endtype cParticle

type aParticle
	real(4) :: v(3),r0(2)
endtype aParticle

type pCItem
	type(aParticle) :: Atm
	type(cParticle) :: Ele
	type(cParticle) :: Ion
end type pCItem

endmodule data_types


далее
use data_types
integer::ipMax=1,iCells=5
integer::ip=1,iCell=1

type(pCItem),allocatable,target,dimension(:,:)::pCellArray

type(cParticle),pointer,dimension(:,:)::pArray
type(cParticle),pointer::p_pointer
real(4),pointer,dimension(:)::v_pointer
real(4)::v_real(3)=99.

allocate( pCellArray(1:ipMax,1:iCells) )

pArray=>pCellArray%Ele !for example

а теперь сама проблема 1: если делаю вот так

p_pointer=>pArray(ip,IC);
то компилятор вылетает с ошибкой сегментирования
~/exp/p7impl2d/src gfortran -Wall data_types.f95
data_types.f95: In function ‘MAIN__’:
data_types.f95:19: internal compiler error: Ошибка сегментирования
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.4/README.Bugs> for instructions.
это баг, или я идиот?

вторая проблема: если делаю так

pArray(ip,iC)%v=smth
то записывается только 1я компонента вектора, однако, если сделать это через промежуточный поинтер
v_pointer=>pArray(ip,iC)%v
v_pointer=smth


то всё нормально записывается. в чём причина?
★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

оппа! внезапно, это gfortran — говно, собрал с помощью g95 — и всё нормально. пойду багрепорт отправлять.

thunar ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

см багрепорт. пишут, что это регрессия и появилась в ветке 4.4

thunar ★★★★★
() автор топика
Ответ на: комментарий от thunar

оппа! внезапно, это gfortran — говно

Да!

собрал с помощью g95 — и всё нормально

Дави на начальство, пусть раскошелится на нормальный компилятор.

yvv ★★☆
()
Ответ на: комментарий от thunar

Для некоммерческого использования под линуксом он бесплатен, для университетов есть скидки. Как вариант ещё попробовать ekopath.

Rakot ★★
()
Ответ на: комментарий от Rakot

попробовал скачать пробную версию — так он затребовал адрес проживания, зип код, чуть ли не размер трусов. её нормальным способом вообще скачать возможно?

thunar ★★★★★
() автор топика
Ответ на: комментарий от thunar

По ifort. Можно и адрес указать. Проще левый выдумать. Потом на почту (можно и левую) придёт ключ активации + ссылка на бинари. Но я бы советовал ещё на ekopath обратить внимание. По крайней мере, свой код я стараюсь писать так, чтобы он нормально собирался gfortranом, ifortом и ekopathом без предупреждений. По идее какие-то грабли можно отловить, с другой стороны минус в том, что какие-то плюшки компиляторов нельзя использовать. Но тут уж каждый выбирает сам.

С ekopathом всё проще. там есть ссылка nightly builds. В общем её надо скопировать и поменять в ней дату на ближайшую. Сам об этом на форониксе случайно узнал. Для этого регистрация не нужна. ekopath 24.04.2013.

Rakot ★★
()
Последнее исправление: Rakot (всего исправлений: 1)
Ответ на: комментарий от Rakot

ifortом и ekopathом

а с plplot оно дружит? потому что в g95 столкнулся с тем, что при линковке ругается «Fatal Error: While reading module 'plplot' found module version 0, expected 9.»

thunar ★★★★★
() автор топика
Последнее исправление: thunar (всего исправлений: 1)
Ответ на: комментарий от Rakot

вообще, конечно, печально что у GNU так плохо с компилятором.

thunar ★★★★★
() автор топика
Последнее исправление: thunar (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.