【发布时间】:2013-08-12 12:54:29
【问题描述】:
我在 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;
}
我将整数值 5 从我的 java 代码传递给这个函数。当我尝试执行上述功能时,出现以下错误:
GLib-ERROR **: /build/buildd/glib2.0-2.30.0/./glib/gmem.c:170: failed to allocate 3077591024 bytes
我在 2 台不同的 ubuntu 机器上尝试了相同的代码,但错误仍然相同。我不知道它为什么要为 24+5 长度分配这么多字节。
谁能建议我任何解决方案?
【问题讨论】:
-
看起来缺少解引用。就像你有
size_t *一样。 -
no.. size_t 是 int 类型。如果我使用 size_t * 它会在编译时出错。
-
当然你需要用
*length取消引用它。让我给你一个答案 -
我预测有人在调用此函数时进行了强制转换以避免错误。我还预测代码要么充满了有人忽略的警告,要么警告被禁用。注意警告,只有在您肯定知道自己在做什么时才添加类型转换。