Glib内存分配错误

时间:2013-08-12 12:54:29

标签: java c glib memset

我在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长度分配这么多字节。

有人能建议我解决吗?

4 个答案:

答案 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)”