| mcheck(3) | Library Functions Manual | mcheck(3) |
الاسم¶
mcheck, mcheck_check_all, mcheck_pedantic, mprobe - التحقق من اتساق الكومة
المكتبة¶
مكتبة سي المعيارية (libc، -lc)
موجز¶
#include <mcheck.h>
int mcheck(typeof(void (enum mcheck_status mstatus)) *f);
int mcheck_pedantic(
typeof(void (enum mcheck_status mstatus)) *f);
void mcheck_check_all(void);
enum mcheck_status mprobe(void *ptr);
الوصف¶
تثبّت الدالة mcheck() مجموعة من خطافات التصحيح لعائلة دوال تخصيص الذاكرة malloc(3). تتسبب هذه الخطافات في إجراء فحوصات اتساق معينة على حالة الكومة. يمكن للفحوصات اكتشاف أخطاء التطبيق مثل تحرير كتلة ذاكرة أكثر من مرة أو إفساد هياكل بيانات المحاسبة التي تسبق كتلة الذاكرة المخصصة مباشرة.
لكي تكون فعالة، يجب استدعاء الدالة mcheck() قبل أول استدعاء لـ malloc(3) أو دالة ذات صلة. في الحالات التي يصعب فيها ضمان ذلك، يُدرج ربط البرنامج بـ -lmcheck استدعاءً ضمنيًا لـ mcheck() (بوسيطة NULL) قبل أول استدعاء لدالة تخصيص ذاكرة.
الدالة mcheck_pedantic() مشابهة لـ mcheck()، ولكنها تجري فحوصات على جميع الكتل المخصصة كلما تم استدعاء إحدى دوال تخصيص الذاكرة. قد يكون هذا بطيئًا جدًا!
تتسبب الدالة mcheck_check_all() في إجراء فحص فوري على جميع الكتل المخصصة. يكون هذا الاستدعاء فعالاً فقط إذا تم استدعاء mcheck() مسبقًا.
إذا اكتشف النظام عدم اتساق في الكومة، تُستدعى الدالة المقدمة من المتصل المشار إليها بـ f مع وسيطة واحدة، mstatus، تشير إلى نوع عدم الاتساق الذي تم اكتشافه. إذا كانت f NULL، تطبع دالة مبدئية رسالة خطأ على stderr وتستدعي abort(3).
تجري الدالة mprobe() فحص اتساق على كتلة الذاكرة المخصصة المشار إليها بـ ptr. يجب استدعاء الدالة mcheck() مسبقًا (وإلا تُرجع mprobe() MCHECK_DISABLED).
تصف القائمة التالية القيم التي تُرجعها mprobe() أو التي تُمرر كوسيطة mstatus عند استدعاء f:
- MCHECK_DISABLED (mprobe() فقط)
- لم تُستدع mcheck() قبل استدعاء أول دالة تخصيص ذاكرة. فحص الاتساق غير ممكن.
- MCHECK_OK (mprobe() فقط)
- لم يُكتشف أي عدم اتساق.
- MCHECK_HEAD
- تم إتلاف الذاكرة السابقة لكتلة مخصصة.
- MCHECK_TAIL
- تم إتلاف الذاكرة التالية لكتلة مخصصة.
- MCHECK_FREE
- تم تحرير كتلة ذاكرة مرتين.
قيمة الإرجاع¶
تُعيد mcheck() و mcheck_pedantic() القيمة 0 عند النجاح، أو -1 عند الخطأ.
السمات¶
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
| الواجهة | السمة | القيمة |
| mcheck(), mcheck_pedantic(), mcheck_check_all(), mprobe() | سلامة الخيوط | MT-Unsafe race:mcheck const:malloc_hooks |
المعايير¶
GNU.
التاريخ¶
- mcheck_pedantic()
- mcheck_check_all()
- glibc 2.2.
- mcheck()
- mprobe()
- glibc 2.0.
ملاحظات¶
يُسبب وصل برنامج مع -lmcheck واستخدام متغير البيئة MALLOC_CHECK_ (الموصوف في mallopt(3)) كشف نفس أنواع الأخطاء. لكن، استخدام MALLOC_CHECK_ لا يتطلب إعادة وصل التطبيق.
أمثلة¶
يستدعي البرنامج أدناه mcheck() مع وسيط NULL ثم يُحرر نفس كتلة الذاكرة مرتين. تُظهر جلسة الصدفة التالية ما يحدث عند تشغيل البرنامج:
$ ./a.out About to free About to free a second time block freed twice Aborted (core dumped)
مصدر البرنامج¶
#include <mcheck.h>
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
char *p;
if (mcheck(NULL) != 0) {
fprintf(stderr, "mcheck() failed\n");
exit(EXIT_FAILURE);
}
p = malloc(1000);
fprintf(stderr, "About to free\n");
free(p);
fprintf(stderr, "\nAbout to free a second time\n");
free(p);
exit(EXIT_SUCCESS);
}
انظر أيضًا¶
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 8 فبراير 2026 | صفحات دليل لينكس (لم تصدر بعد) |