我使用的是库libfprint在Ubuntu次我想通过我的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的长度分配这么多字节。
可能有人建议我任何解决办法吗?
源代码中明确指出:
/* structs that applications are not allowed to peek into */
(...)
struct fp_img;
所以,我不知道你为了甚至编译东西,需要的大小做了什么struct fp_img
:你不应该是能够做到这一点,因为在结构声明是不透明的。
它看起来像你得到一个指针,而不是size_t
。 试着改变你的定义:
API_EXPORTED struct fp_img *fpi_img_new(size_t * length);
那么你需要derefenrece它:
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)它是高度依赖于平台的,所以不要可以引用我这句话。
如果更改,会发生什么
sizeof(*img)
同
sizeof(struct fp_img)
? 我在想,因为*在当时IMG将不会被初始化到任何您所呼叫g_malloc(),这可能是你的问题。
错误:结构fp_img * IMG = g_malloc(的sizeof(*张图片)+长度);
* IMG是新创建的,所以你不能使用像“的sizeof(* IMG)”,你可以这样写:“的sizeof(结构fp_img)”