我在ubuntu上使用库libfprint我试图通过我的java代码调用函数。
API_EXPORTED struct fp_img *fpi_img_new(size_t length)
{
struct fp_img *img = g_malloc(sizeof(*img) + length);
memset(img, 0, sizeof(*img));
fp_dbg("length=%zd", length);
img->length = length;
return img;
}
我将java代码中的整数值5传递给此函数。当我尝试执行上述功能时,我遇到以下错误:
GLib-ERROR **: /build/buildd/glib2.0-2.30.0/./glib/gmem.c:170: failed to allocate 3077591024 bytes
我在2台不同的ubuntu机器上尝试了相同的代码,但错误仍然相同。我不知道为什么它试图为24 + 5长度分配这么多字节。
有人能建议我解决吗?
答案 0 :(得分:2)
The source code明确指出:
/* structs that applications are not allowed to peek into */
(...)
struct fp_img;
所以,我不确定你为了编译需要大小为struct fp_img
的东西你做了什么:你不应该这样做,因为结构声明是不透明的。 / p>
答案 1 :(得分:1)
看起来你得到一个指针而不是size_t
。
尝试将您的定义更改为:
API_EXPORTED struct fp_img *fpi_img_new(size_t * length);
然后你需要解除它:
API_EXPORTED struct fp_img *fpi_img_new(size_t * length)
{
struct fp_img *img = g_malloc(sizeof(*img) + *length);
memset(img, 0, sizeof(*img));
fp_dbg("length=%zd", *length);
img->length = *length;
return img;
}
注意:似乎3077591024在堆栈中(0x125807FE),它是高度依赖平台的,所以不要引用我。
答案 2 :(得分:0)
如果您更改
会发生什么sizeof(*img)
带
sizeof(struct fp_img)
?我认为这可能是你的问题,因为* img在你调用g_malloc()时没有被初始化为任何东西。
答案 3 :(得分:-1)
错误:struct fp_img * img = g_malloc(sizeof(* img)+ length);
* img是新创建的,所以你不能像“sizeof(* img)”那样使用它, 你可以像这样写:“sizeof(struct fp_img)”