- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新:
我正在研究通过GCO实现C库的Golang代码。在C函数的参数之间有一个* Cchar对象。
我使用C.CString()函数将字符串转换为* char,但是当我需要使用for循环实现它时遇到了问题。
感谢@peterSON,我可以继续前进。现在,程序将运行更长的时间,直到失败。现在我得到结果,直到第三个周期(五个周期)为止。当开始第四个时,它再次指示“退出状态3221226356”
这是一段代码:
package main
//#include <stdio.h>
//#include <stdlib.h>
//#cgo CFLAGS: -I C:/Go-Project/src/Astrocal
//#cgo LDFLAGS: -L C:/Go-Project/src/Astrocal72 -lswedll64
//#include "swephexp.h"
import "C"
import (
"fmt"
"unsafe"
)
func (P DATA) FixStarUT() {
C.swe_set_ephe_path(C.CString("C:/sweph/ephe")) // connect to library C.
var Cxx [6]C.double
var serr string
var Cserr *C.char = C.CString(serr)
var FixStarCchar *C.char = C.CString("")
var iFLAG = []uint32{33026, 35074, 266, 2314, 98562, 100610, 65802, 67851} // 33026, 35074, 266, 2314, 98562, 100610, 65802, 67851
var fixStarSlice = []string{"aboras", "achernar", "adara", "ain", "vega"}
fmt.Println("Memory Address of FixStarCchar before For Range ->", FixStarCchar)
// For Range 1
for i, valFixStar := range fixStarSlice {
defer C.free(unsafe.Pointer(FixStarCchar))
defer C.free(unsafe.Pointer(Cserr))
FixStarCchar = C.CString(valFixStar)
fmt.Println("\nExternal cycle:", i, "Star (valFixStar):", valFixStar)
fmt.Println("Memory Add. of FixStarCchar ->", FixStarCchar)
// For Range 2
for i2, valSistem := range iFLAG {
// C functions
C.swe_set_topo(C.double(P.LONsite), C.double(P.LATsite), C.double(P.ALTsite))
C.swe_fixstar_ut(FixStarCchar, C.double(P.JulianDay), C.int(valSistem), &Cxx[0], Cserr)
// Exporting results to a slice
var positionFixStar []float64
positionFixStar = append(positionFixStar, float64(Cxx[0]), float64(Cxx[1]), float64(Cxx[2]), float64(Cxx[3]), float64(Cxx[4]), float64(Cxx[5]))
fmt.Println("\tInternal cycle:", i2, "\tSistem:", valSistem, "\tPosition:", positionFixStar)
}
}
C.swe_close() // disconnect library C
}
PS C:\Go-Project\src\Astrocal72> go run main.go
Memory Address of FixStarCchar before For Range -> 0x1019c80
External cycle: 0 Star (valFixStar): aboras
Memory Add. of FixStarCchar -> 0x1019ca0
Internal cycle: 0 Sistem: 33026 Position: [331.7560238873596 -23.63731225621964 1 0 0 0]
Internal cycle: 1 Sistem: 35074 Position: [343.5555314743071 -32.70632643606941 1 0 0 0]
Internal cycle: 2 Sistem: 266 Position: [331.7521303243937 -23.639006118391627 1 0 0 0]
Internal cycle: 3 Sistem: 2314 Position: [343.5525162650043 -32.709352136426915 1 0 0 0]
Internal cycle: 4 Sistem: 98562 Position: [307.45659891000344 -23.63731225621964 1 0 0 0]
Internal cycle: 5 Sistem: 100610 Position: [319.25465207507114 -32.705260202398776 1 0 0 0]
Internal cycle: 6 Sistem: 65802 Position: [307.4527053470375 -23.63900611839163 1 0 0 0]
Internal cycle: 7 Sistem: 67851 Position: [319.2516367429912 -32.7082857906988 0.9999999999999999 0 0 0]
External cycle: 1 Star (valFixStar): achernar
Memory Add. of FixStarCchar -> 0x101b3a0
Internal cycle: 0 Sistem: 33026 Position: [344.86781077811537 -59.37245156484419 1 0 0 0]
Internal cycle: 1 Sistem: 35074 Position: [24.13636287205359 -57.39092532881141 0.9999999999999999 0 0 0]
Internal cycle: 2 Sistem: 266 Position: [344.86287075464315 -59.37668655703472 1 0 0 0]
Internal cycle: 3 Sistem: 2314 Position: [24.138688732702057 -57.39568950801329 1 0 0 0]
Internal cycle: 4 Sistem: 98562 Position: [320.56838580075924 -59.37245156484419 0.9999999999999998 0 0 0]
Internal cycle: 5 Sistem: 100610 Position: [359.83323867384445 -57.39150066286222 1 0 0 0]
Internal cycle: 6 Sistem: 65802 Position: [320.563445777287 -59.37668655703472 0.9999999999999999 0 0 0]
Internal cycle: 7 Sistem: 67851 Position: [359.835563909282 -57.39626493585631 1 0 0 0]
External cycle: 2 Star (valFixStar): adara
Memory Add. of FixStarCchar -> 0x101ae40
Internal cycle: 0 Sistem: 33026 Position: [110.31533627711894 -51.36455324165249 1 0 0 0]
Internal cycle: 1 Sistem: 35074 Position: [104.3395190395512 -28.925572447433648 1 0 0 0]
Internal cycle: 2 Sistem: 266 Position: [110.32409258962711 -51.363920733883326 0.9999999999999999 0 0 0]
Internal cycle: 3 Sistem: 2314 Position: [104.34580120684954 -28.92581091916995 0.9999999999999999 0 0 0]
Internal cycle: 4 Sistem: 98562 Position: [86.01591129976276 -51.36455324165249 0.9999999999999998 0 0 0]
Internal cycle: 5 Sistem: 100610 Position: [80.0401030111902 -28.927947460228687 0.9999999999999999 0 0 0]
Internal cycle: 6 Sistem: 65802 Position: [86.02466761227095 -51.363920733883326 1 0 0 0]
Internal cycle: 7 Sistem: 67851 Position: [80.04638532334661 -28.92818591289178 1 0 0 0]
External cycle: 3 Star (valFixStar): ain
Memory Add. of FixStarCchar -> 0x101ad70
exit status 3221226356
最佳答案
I thought that by freeing memory with C.Free (unsafe.Pointer ()) it would work, but it fails. It returns "could not determine kind of name for C.Free".
C.Free
与
C.free
不同。
package main
// #include <stdio.h>
// #include <stdlib.h>
//
// static void myprint(char* s) {
// printf("%s\n", s);
// }
import "C"
import "unsafe"
func main() {
cs := C.CString("Hello from stdio")
C.myprint(cs)
C.free(unsafe.Pointer(cs))
}
Hello from stdio
Comment: I changed the code. Now it works a little better. Before, it failed the first cycle. Now in the third. I need it to reach 500 cycles – Jumanyi
exit status 3221226356
消息可能表示内存损坏。除其他外,您对
C.swe_fixstar_ut
的调用看起来可疑。
package main
/*
#cgo CFLAGS: -I C:/Users/peter/astro
#cgo LDFLAGS: -L C:/Users/peter/astro -lswedll64
#include "swephexp.h"
*/
import "C"
import (
"errors"
"strconv"
)
type SweErr struct {
Code int32
Err error
}
func (e SweErr) Error() string {
return strconv.Itoa(int(e.Code)) + ": " + e.Err.Error()
}
func SweFixstarUt(star string, tjd float64, iflag int32) (name string, xx []float64, rc int32, err error) {
// Programming interface to the Swiss Ephemeris
// https://www.astro.com/swisseph/swephprg.htm
// 3.5. Error handling and return values
// 5. Fixed stars functions
// 5.2. swe_fixstar2_ut(), swe_fixstar2(), swe_fixstar_ut(), swe_fixstar()
var swe struct {
rc C.int32
star [C.AS_MAXCH + 1]C.char
tjd_ut C.double
iflag C.int32
xx [6]C.double
serr [C.AS_MAXCH + 1]C.char
}
if len(star) > len(swe.star)-1 {
star = star[:len(swe.star)-1]
}
for i := 0; i < len(star); i++ {
swe.star[i] = C.char(star[i])
}
swe.star[len(star)] = 0
swe.tjd_ut = C.double(tjd)
swe.iflag = C.int32(iflag)
swe.rc = C.swe_fixstar_ut(
&swe.star[0], swe.tjd_ut, swe.iflag, &swe.xx[0], &swe.serr[0],
)
swe.star[len(swe.star)-1] = 0
swe.serr[len(swe.serr)-1] = 0
if swe.rc < 0 {
err := SweErr{
Code: int32(swe.rc),
Err: errors.New(C.GoString(&swe.serr[0])),
}
return "", nil, 0, err
}
name = C.GoString(&swe.star[0])
xx = make([]float64, len(swe.xx))
for i := range xx {
xx[i] = float64(swe.xx[i])
}
rc = int32(swe.rc)
return name, xx, rc, nil
}
func main() {}
关于c - Golang的字符串和C Char *之间的转换为For Range时出现内存问题,退出状态3221226356,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62352410/
这个问题在这里已经有了答案: Why don't Java's +=, -=, *=, /= compound assignment operators require casting? (11 个
当我尝试运行以下代码时,List(.of) 无法编译并给出主题错误。 package collections; import java.util.LinkedHashSet; import java.
我正在尝试编译使用 ChatScript 库的程序。这是我在名为 main.cpp 的文件中的代码: #include #include "common.h" using namespace std
我想在我的程序中外部使用 ChatScript。在documents它说: Embedding Step #1 First, you will need to modify `common.h and
假设我有一个 char,我想用一行代码将其 strcat() 转换为 char 数组。对于 [一个非实用的] 示例: strcat("ljsdflusdfg",getchar()); 或者我想做相反的
我有以下类型签名: *Main Lib> let f :: a -> a -> a -> a; f = undefined *Main Lib> let x :: Char; x = undefin
我正在学习如何在 C 中使用指针(使用 malloc 和 free),但我在这个练习中遇到了一些麻烦。我只想制作一个指针数组,我想在其中保存每个单词的方向。然后我想为一个特定的词做一个 free(),
我有一个字符*: char* version = "10.5.108"; 我想通过字符分隔符获取两个新的 char*。 char delimiter = '.'; 执行以下代码后: printf("|
最近在学习Cpp,今天在学习使用Clion做测试的时候,发生了奇怪的事情。 这是我的代码 int main() { char c = 'b'; char carr[1]{'a'};
我对 c 很陌生,我正在审查一些代码。我遇到了这个: static char * fromDataType; static char * toDataType; static char * fromR
我有一个像这样的动态结构: struct network { int count; char** ips; } 如果我知道每个字符串数组都是 16 个字节(即 INET_ADDRSTR
我有一个旧程序,其中使用了一些库函数,但我没有那个库。 所以我正在使用 C++ 库编写该程序。在那个旧代码中有一些函数是这样调用的 *string = newstrdup("这里有一些字符串"); 字
我正在编写一个函数,该函数接受 ArrayList,然后将每个 char[] 复制到另一个增加长度的 char[] 中,然后将新的 char[] 添加到新的 ArrayList 中。当我尝试复制数组时
我正在寻找 map >并生成每个可能的 map从它。 我知道这可能会占用大量内存并需要一些时间。 每个map需要包含每个字母 a-z,并映射到唯一的 a-z 字符。 IE。啊bjcp迪EVfh嘎血红蛋
#define NAME_LEN 20 #include "stdio.h" #include "stdlib.h" #include "string.h" #pragma warning(disab
所以我必须创建一个函数来找到一对带有第一个字母并返回第二个字母的函数。 我实际上找到了一个答案,但是使用 map 功能却找不到。 lookUp :: Char -> [(Char, Cha
我最近接受采访并要求写mystrcat(*s1, *s2, *s3) 其中s1 和s2 是源字符串连接结果由 s3 给出。有人告诉我,不要担心 s3 的内存分配,并假设 s1 和 s2 不是空/无效字
今天我与一位同事讨论了他(对我来说)不寻常的“main”函数签名。他喜欢这样声明: int main(int argc, char* (*argv)[]) { printf("at index
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: What's the difference between new char[10] and new cha
通常字符串文字是 const char[] 类型。但是当我把它当作其他类型时,我得到了奇怪的结果。 unsigned char *a = "\355\1\23"; 使用此编译器会抛出警告“初始化中的指
我是一名优秀的程序员,十分优秀!