Tôi muốn kiểm tra xem con trỏ bên trong một kiểu dẫn xuất đã được xác định hay chưa. Tôi đã viết code đơn giản sau đây để cho bạn thấy vấn đề của tôi:Con trỏ kết hợp trong loại có nguồn gốc? gFortran vs Intel
program test
implicit none
type y
real(8), pointer :: x(:)
end type y
type(y), pointer :: w(:)
allocate(w(2))
allocate(w(1)%x(2))
write(*,*) associated(w(1)%x), associated(w(2)%x)
end program test
Biên dịch mã này với gFortran 4.4.1 và chạy nó trên Ubuntu cho kết quả:
T F
trong khi cùng mã biên soạn trên Windows Vista với trình biên dịch Intel Fortran 11.0 cung cấp:
T T
Kết quả đầu tiên (gFortran) là điều tôi thực sự mong đợi. Nhưng thực tế là trình biên dịch Intel cung cấp một kết quả khác khiến tôi sợ mã của tôi có thể không chính xác. Tôi đang làm điều gì đó khủng khiếp sai với các con trỏ trong ví dụ này? Bất kỳ ý tưởng hay giải thích nào?
Rất cám ơn trước sự giúp đỡ của bạn!
Cảm ơn bạn rất nhiều !! Đây thực sự là vấn đề. Giải pháp bạn đề xuất hoạt động rất tốt, với cả trình biên dịch Intel và gFortran. – remek