.\" -*- coding: UTF-8 -*- .\" Copyright 2002, Walter Harms .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-1.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH __malloc_hook 3 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم __malloc_hook, __malloc_initialize_hook, __memalign_hook, __free_hook, __realloc_hook, __after_morecore_hook \- متغيرات تصحيح أخطاء malloc (مُهمَلة) .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBtypeof(void *(size_t \fP\fIsize\fP\fB, const void *\fP\fIcaller\fP\fB))\fP \fB*volatile __malloc_hook;\fP .P \fBtypeof(void *(void *\fP\fIp\fP\fB, size_t \fP\fIsize\fP\fB, const void *\fP\fIcaller\fP\fB))\fP \fB*volatile __realloc_hook;\fP .P \fBtypeof(void *(size_t \fP\fIalign\fP\fB, size_t \fP\fIsize\fP\fB, const void *\fP\fIcaller\fP\fB))\fP \fB*volatile __memalign_hook;\fP .P \fBtypeof(void *(void *\fP\fIp\fP\fB, const void *\fP\fIcaller\fP\fB))\fP \fB*volatile __free_hook;\fP .P \fBtypeof(void (void)) *__malloc_initialize_hook;\fP \fBtypeof(void (void)) *volatile __after_mrecore_hook;\fP .fi .SH الوصف مكتبة C لجنو تسمح لك بتعديل سلوك \fBmalloc\fP(3)، \fBrealloc\fP(3)، و \fBfree\fP(3) بتحديد دوال ربط مناسبة. يمكنك استخدام هذه الخطافات لمساعدتك في تصحيح أخطاء البرامج التي تستخدم تخصيص الذاكرة الديناميكي، على سبيل المثال. .P المتغير \fB__malloc_initialize_hook\fP يشير إلى دالة تُستدعى مرة واحدة عند تهيئة تنفيذ malloc. هذا متغير ضعيف، لذا يمكن تجاوزه في التطبيق بتعريف مثل التالي: .P .in +4n .EX typeof(void (void)) *__malloc_initialize_hook = my_init_hook; .EE .in .P الآن الدالة \fImy_init_hook\fP() يمكنها القيام بتهيئة جميع الخطافات. .P الدوال الأربع المشار إليها بواسطة \fB__malloc_hook\fP، \fB__realloc_hook\fP، \fB__memalign_hook\fP، \fB__free_hook\fP لها نموذج أولي مثل الدوال \fBmalloc\fP(3)، \fBrealloc\fP(3)، \fBmemalign\fP(3)، \fBfree\fP(3)، على التوالي، باستثناء أن لها وسيطة أخيرة \fIcaller\fP تعطي عنوان المستدعي لـ \fBmalloc\fP(3)، إلخ. .P المتغير \fB__after_morecore_hook\fP يشير إلى دالة تُستدعى كل مرة بعد طلب المزيد من الذاكرة من \fBsbrk\fP(2). .SH المعايير GNU. .SH ملاحظات .\" https://bugzilla.redhat.com/show_bug.cgi?id=450187 .\" http://sourceware.org/bugzilla/show_bug.cgi?id=9957 استخدام دوال الربط هذه ليس آمنًا في البرامج متعددة الخيوط، وهي الآن مُهمَلة. من glibc 2.24 فصاعدًا، أُزيل المتغير \fB__malloc_initialize_hook\fP من واجهة البرمجة، ومن glibc 2.34 فصاعدًا، أُزيلت جميع متغيرات الربط من واجهة البرمجة. يجب على المبرمجين بدلاً من ذلك استباق استدعاءات الدوال ذات الصلة بتعريف وتصدير \fBmalloc\fP()، \fBfree\fP()، \fBrealloc\fP()، و \fBcalloc\fP(). .SH أمثلة هذا مثال قصير لكيفية استخدام هذه المتغيرات. .P .EX #include #include \& /* Prototypes for our hooks */ static void my_init_hook(void); static void *my_malloc_hook(size_t, const void *); \& /* Variables to save original hooks */ static typeof(void *(size_t, const void *)) *old_malloc_hook; \& /* Override initializing hook from the C library */ typeof(void (void)) *__malloc_initialize_hook = my_init_hook; \& static void my_init_hook(void) { old_malloc_hook = __malloc_hook; __malloc_hook = my_malloc_hook; } \& static void * my_malloc_hook(size_t size, const void *caller) { void *result; \& /* Restore all old hooks */ __malloc_hook = old_malloc_hook; \& /* Call recursively */ result = malloc(size); \& /* Save underlying hooks */ old_malloc_hook = __malloc_hook; \& /* printf() might call malloc(), so protect it too */ printf("malloc(%zu) called from %p returns %p\[rs]n", size, caller, result); \& /* Restore our own hooks */ __malloc_hook = my_malloc_hook; \& return result; } .EE .SH "انظر أيضًا" \fBmallinfo\fP(3)، \fBmalloc\fP(3)، \fBmcheck\fP(3)، \fBmtrace\fP(3) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .