변수와 매핑되는 Cray 포인터를 Fortran 서브 루틴으로 전달합니다. 다음과 같이 설명되어 있습니다 :Cray 포인터를 서브 루틴으로 전달하는 방법은 무엇입니까?
이program test
integer val
pointer (ptr_val, val)
print *, "1:", loc(val)
print *, "1:", ptr_val
CALL DPMALLOC(ptr_val, sizeof(val))
print *, "2:", loc(val)
print *, "2:", ptr_val
val = 999
call foo(val)
end program test
subroutine foo(val)
integer val
print *, "3:",val
print *, "3:", loc(val)
print *, "3:", ptr_val
call DPMALLOC(ptr_val, sizeof(val))
print *, "4:", ptr_val
print *, "4:", loc(val)
return
end subroutine foo
void dpmalloc_(void **data, int *size){
*data =(void *) malloc(*size);
printf("malloc\n");
}
출력은 :
1: 0
1 0
2: 30743328
2: 30743328
3: 999
3: 30743328
3: 7.82827652E-38
4: 7.82833033E-38
4: 30743328
따라서, 나는 서브 루틴에서 글로벌 포인터를 사용할 수 없습니다 것 같다. 어떻게 해결할 수 있습니까?
사용하지 않는 포트란 77 크레이 포인터 결코 그 또는 다른 국제 표준의 일부가 아니며 따라서 본질적으로 휴대 할 수 없습니다. 이와 같이 잘 정의 된 방법이 없습니다. 당신은 당신의 컴파일러 문서를 읽어야 할 것이다. –
사용하는 컴파일러가 중요 할 수 있습니다. 그리고 때로는 총알을 비트하고 fortran90으로 이동하는 것이 좋습니다. c_malloc을 ALLOCATE로 바꾸십시오. https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/293353 – Holmz
질문에 답할 수 있도록 더 자세히 알려주십시오. 나는 서브 루틴의 코드 또는 적어도 헤더를 놓치고있다. 그리고 나는 또한 실제 문제에 대한 설명을 놓치고 있습니다. 귀하의 질문은 무엇인가? arny 오류 메시지가 있습니까? 그것은 어떻게 생겼어? 아니면 잘못된 결과입니까? 추락? –