Golang SWIG示例2:超出紧急范围的切片边界

问题描述 投票:0回答:1

我目前正在通过SWIG Go examples工作,在第二个示例“ constants”上遇到了问题

由于某种原因,即时消息超出了紧急范围,但仅当我在Swig调用中将32指定为-intgosize参数的参数时,

如果我用swig -go -intgosize 64 example.i畅饮,一切正常

example.i swig文件看起来如下

/* File : example.i */
%module example

/* A few preprocessor macros */

#define    ICONST      42
#define    FCONST      2.1828
#define    CCONST      'x'
#define    CCONST2     '\n'
#define    SCONST      "Hello World"
#define    SCONST2     "\"Hello World\""

/* This should work just fine */
#define    EXPR        ICONST + 3*(FCONST)

/* This shouldn't do anything */
#define    EXTERN      extern

/* Neither should this (BAR isn't defined) */
#define    FOO         (ICONST + BAR)

/* The following directives also produce constants */

%constant int iconst = 37;
%constant double fconst = 3.14;

[从输出中判断,使用32参数运行swig时,我认为恐慌是由SCONST2引起的,在注释掉#define SCONST2行之后,恐慌消失了。

SCONST2的输出如下所示:

panic: runtime error: slice bounds out of range [:824633720845] with length 2147483647

goroutine 1 [running]:
swigtest/02_constants.swigCopyString(0x1056760, 0xc00000000d, 0xc000107ef0, 0xc000107ef8)
        C:/Users/visfgp/go/personal_code/src/swigtest/02_constants/example.go:64 +0xb0
swigtest/02_constants._swig_getSCONST2(0x50230a, 0xc00003e1e0)
        C:/Users/visfgp/go/personal_code/src/swigtest/02_constants/example.go:97 +0x4a
swigtest/02_constants.init()
        C:/Users/visfgp/go/personal_code/src/swigtest/02_constants/example.go:101 +0x38

我的问题是此字符串会引发这种恐慌,为什么SCONST字符串不会引发这种恐慌,它与go ints的大小有什么关系?

go int size swig
1个回答
0
投票
定义int32变量时,其范围是-21474836482147483647。也许您的变量超出了此范围[:824633720845]。在这种情况下,您应该使用int64!
© www.soinside.com 2019 - 2024. All rights reserved.