Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 从c_ptr浇铸后保留(或恢复)结合剂_Pointers_Fortran_Fortran Iso C Binding - Fatal编程技术网

Pointers 从c_ptr浇铸后保留(或恢复)结合剂

Pointers 从c_ptr浇铸后保留(或恢复)结合剂,pointers,fortran,fortran-iso-c-binding,Pointers,Fortran,Fortran Iso C Binding,我有一个存储数组的类型: type data type(someType) pointer :: someTypePtr(:) end type 我将某物分配给someTypePtr type(data), intent(inout) :: this integer, intent(in) :: lb, ub type(someType), target, intent(in) :: sometype(lb:ub) this%someTypePtr => sometype 稍后,我

我有一个存储数组的类型:

type data
  type(someType) pointer :: someTypePtr(:)
end type
我将某物分配给someTypePtr

type(data), intent(inout) :: this
integer, intent(in) :: lb, ub
type(someType), target, intent(in) :: sometype(lb:ub)
this%someTypePtr => sometype
稍后,我创建了一个c_ptr,指向我刚才引用的实例。之后,当我将此指针转换回fortran类型时,下限从0开始:

type(c_ptr) :: ptr
type(someType) :: data
call c_f_pointer(ptr, data)
write(*,*) lbound(data%someTypePtr) !will give 0

是否有类似于重塑的东西将
someTypePtr
更改回原来的
lbound:ubound

很奇怪,它应该是
1
,而不是
0
。无论如何,您可以在以后重新映射指针:

 use iso_c_binding
 real(c_float), pointer :: ptr(:)
 type(c_ptr) :: ptr_c

 allocate(ptr(5:6))

 ptr_c = c_loc(ptr(lbound(ptr)))
 call c_f_pointer(ptr_c, ptr, [2])

 print *, lbound(ptr)

 ptr(5:6) => ptr

 print *, lbound(ptr)
end
运行:


如图所示,您的源代码片段有点不完整或有错误。例如,第二个代码段中的数据必须具有POINTER属性。我希望编译器能够诊断这个特定的问题,但可能示例源代码中缺少了导致其他问题的其他内容。你能确保这些代码片段是准确的吗?你能展示一下获得C_PTR的代码吗。在获取C_PTR和在第二个片段中使用C_PTR之间,您如何处理它?您正在使用哪些编译器/版本/编译选项?
> ./a.out 
           1
           5