1
は私のコードです:C.CStringによって割り当てられたメモリを解放するにはどうすればよいですか?ここ
helloworld.go:
src/helloworld.go:9:2: could not determine kind of name for C.free
をこの記事に基づいて:私が得たエラーの
package main
import "C"
import "unsafe"
//export HelloWorld
func HelloWorld() *C.char {
cs := C.CString("Hello World!")
C.free(unsafe.Pointer(cs))
return cs
}
func main() {}
一つhttps://blog.golang.org/c-go-cgo
私はまた、私は#include <stdlib.h>
をCファイルの先頭に追加する必要があることを知りました。
helloworld.h:
#include <stdlib.h>
/* Created by "go tool cgo" - DO NOT EDIT. */
/* package command-line-arguments */
/* Start of preamble from import "C" comments. */
/* End of preamble from import "C" comments. */
/* Start of boilerplate cgo prologue. */
#line 1 "cgo-gcc-export-header-prolog"
#ifndef GO_CGO_PROLOGUE_H
#define GO_CGO_PROLOGUE_H
typedef signed char GoInt8;
typedef unsigned char GoUint8;
typedef short GoInt16;
typedef unsigned short GoUint16;
typedef int GoInt32;
typedef unsigned int GoUint32;
typedef long long GoInt64;
typedef unsigned long long GoUint64;
typedef GoInt64 GoInt;
typedef GoUint64 GoUint;
typedef __SIZE_TYPE__ GoUintptr;
typedef float GoFloat32;
typedef double GoFloat64;
typedef float _Complex GoComplex64;
typedef double _Complex GoComplex128;
/*
static assertion to make sure the file is being used on architecture
at least with matching size of GoInt.
*/
typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1];
typedef struct { const char *p; GoInt n; } GoString;
typedef void *GoMap;
typedef void *GoChan;
typedef struct { void *t; void *v; } GoInterface;
typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;
#endif
/* End of boilerplate cgo prologue. */
#ifdef __cplusplus
extern "C" {
#endif
extern char* HelloWorld();
#ifdef __cplusplus
}
#endif
ノー成功にそれを試してみました。
私はメモリを解放する必要があります。
どうすればよいですか?この例では、文字列を出力するためです。私はそれを返すしたい。 Cなしで。私はそれをすることができます。私はちょうどメモリリークまたはいくつかの他の問題を引き起こすことを心配しています。
しかし、今、私は、ランダムな文字列を取得しています。 https://stackoverflow.com/questions/47194827/getting-unreadable-string-from-my-node-js-extension-made-with-golangところで助けてくれてありがとう。 – jnbdz