Glib内存分配错误

我在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到此函数。 当我尝试执行上述function时,我遇到以下错误:

 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); 

然后你需要解除它:

 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()时没有初始化为任何东西。

错误:struct fp_img * img = g_malloc(sizeof(* img)+ length);

* img是新创建的,所以你不能像“sizeof(* img)”那样使用它,你可以像这样写:“sizeof(struct fp_img)”