油嘴内存分配错误(Glib memory allocation error)

2019-10-18 12:07发布

我使用的是库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的长度分配这么多字节。

可能有人建议我任何解决办法吗?

Answer 1:

源代码中明确指出:

/* structs that applications are not allowed to peek into */
(...)
struct fp_img;

所以,我不知道你为了甚至编译东西,需要的大小做了什么struct fp_img :你不应该是能够做到这一点,因为在结构声明是不透明的。



Answer 2:

它看起来像你得到一个指针,而不是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)它是高度依赖于平台的,所以不要可以引用我这句话。



Answer 3:

如果更改,会发生什么

sizeof(*img)

sizeof(struct fp_img)

? 我在想,因为*在当时IMG将不会被初始化到任何您所呼叫g_malloc(),这可能是你的问题。



Answer 4:

错误:结构fp_img * IMG = g_malloc(的sizeof(*张图片)+长度);

* IMG是新创建的,所以你不能使用像“的sizeof(* IMG)”,你可以这样写:“的sizeof(结构fp_img)”



文章来源: Glib memory allocation error
标签: java c glib memset