Ошибка выделения памяти Glib

Я использую библиотеку libfprint на ubuntu nd Я пытаюсь вызвать функцию через свой 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 

Я пробовал один и тот же код на двух разных машинах 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 ().

ERROR: struct fp_img * img = g_malloc (sizeof (* img) + длина);

* img создан, поэтому вы не можете использовать его как «sizeof (* img)», вы можете написать вот так: «sizeof (struct fp_img)»