Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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
&引用;无效内存地址“;从Python调用Go时_Python_Go - Fatal编程技术网

&引用;无效内存地址“;从Python调用Go时

&引用;无效内存地址“;从Python调用Go时,python,go,Python,Go,我正在尝试在中扩展代码。我想看看如何处理返回错误的函数。请参阅下面的代码,运行Python代码时,我得到panic:runtime error:无效内存地址或零指针解引用。有没有办法解决这个问题 gmath.go 主程序包 进口( “fmt” ) 输入“C” //出口部 func Div(x,y float64)(float64,错误){ fmt.Printf(“调用的Div:x=%f,y=%f\n”,x,y) 如果y==0{ 返回0,fmt.Errorf(“零错误”) } 返回x/y,零 }

我正在尝试在中扩展代码。我想看看如何处理返回错误的函数。请参阅下面的代码,运行Python代码时,我得到
panic:runtime error:无效内存地址或零指针解引用。有没有办法解决这个问题

gmath.go

主程序包
进口(
“fmt”
)
输入“C”
//出口部
func Div(x,y float64)(float64,错误){
fmt.Printf(“调用的Div:x=%f,y=%f\n”,x,y)
如果y==0{
返回0,fmt.Errorf(“零错误”)
}
返回x/y,零
}
func main(){}
gmath.py

导入ctypes
类界面(ctypes.Structure):
_字段=[
('t',c类型c_void_p),
('v',ctypes.c_void_p),
]
类DivRet(ctypes.Structure):
_字段=[
('result',ctypes.c_float),
('error',GoInterface),
]
lib=ctypes.cdll.LoadLibrary('./gmath.so')
lib.Div.argtypes=[ctypes.c_double,ctypes.c_double]
lib.Div.restype=DivRet
r=lib.Div(1.2,2.3)
示例运行

$make
go build-o gmath.so-buildmode=c-shared gmath.go
$python gmath.py
调用的Div:x=1.200000,y=2.300000
死机:运行时错误:无效内存地址或零指针取消引用
[信号SIGSEGV:分段冲突代码=0x1 addr=0x17 pc=0x7fbe5fda928d]
goroutine 17[正在运行,锁定到线程]:
主要部分功能1(0xc42003cea8)
命令行参数/_obj/_cgo_gotypes.go:46+0x42
主管道(0x3FF3333、0x400266666666、0x3fe0b21642c8590b、0x0、0x0)
命令行参数/_obj/_cgo_gotypes.go:48+0xaa
[1] 29009中止(内核转储)python gmath.py

结果的错误部分似乎是最初的问题。如果我将error改为字符串并返回(float64,*C.char),它就会工作。

另请参见