السلام عليكم ورحمة الله
ما الفرق بين الدالة malloc الكلمة المفتاحية في سي++ new اللتان تختصان بالمؤشرات
وهل يمكن عمل دالة مثال هذه الدالة
وشكرا لكم
السلام عليكم ورحمة الله
ما الفرق بين الدالة malloc الكلمة المفتاحية في سي++ new اللتان تختصان بالمؤشرات
وهل يمكن عمل دالة مثال هذه الدالة
وشكرا لكم
تم تعديل هذه المشاركة بواسطة أحمد الشنقيطي في 24 يونيو 2012 في 17:38 — السبب: تعديل العنوان
السلام عليكم ,,
الفرق في طريقة الاستخدام فقط ,,
cout << "1\r\n"; Test* t1 = new Test(); t1->Hello(); delete t1; cout << "2\r\n"; Test* t2 = (Test*) malloc(sizeof Test); t2->Hello(); free(t2);
هذا لحالة حجز مصفوفة لبعد واحد ,,
لبعدين ,,
int* i1 = new int; delete i1; int* i2 = (int*) malloc(sizeof(int)); free(i2); //declaring native type array char** c1 = new char*[10]; delete[] c1; char** c2 = (char**) malloc(sizeof(char)*10); free(c2);
وهلم جرا وحتى 100 بعد لو أردت :)
بالنسبة لطريقة البرمجة ,,
يمكنك نظام التشغيل windows من حجز المتغيرات بالمستوى الأدنى باستخدام البنية ,,
_CrtMemBlockHeader
وانشاء متغير منها لاحتواء ارجاع قيمة الدالة ,,
كالتالي ,,
pHead = (_CrtMemBlockHeader *)_heap_alloc_base(blockSize);
حيث head متغير من نوع البنية CrtMemBlockHeader ,, عرفته في الأصل ,,
المهم بعد ذلك عليك ب
pHead->pBlockHeaderNext = NULL; pHead->pBlockHeaderPrev = NULL; pHead->szFileName = NULL; pHead->nLine = IGNORE_LINE; pHead->nDataSize = nSize; pHead->nBlockUse = _IGNORE_BLOCK; pHead->lRequest = IGNORE_REQ;
لحجز الذاكرة وتوجد 5 أنواع من طرق حجز الذاكرة بالطبع كل هذا من الذاكرة التكويمية heap ,, لأننا نتعامل بحجز المؤشرات وليس من الذاكرة الستاتيكية ,,
عموما يمكنك أن تتعامل على مستوى أعلى قليلا باستخدام ,,
void * pvBlk; pvBlk = _heap_alloc_dbg(nSize, nBlockUse, szFileName, nLine);
التي يمكن أن تكون قيمها كالتالي :
_heap_alloc_dbg(100,_newmode,_NORMAL_BLOCK,NULL,0);
ويمكن أن تتعامل على مستوى أعلى من ذلك وتستدعي الدالة ,,
_nh_malloc_dbg(nSize, _newmode, _NORMAL_BLOCK, NULL, 0);
بشكل مباشر بالطبع يجب مساوة المؤشر بقيمة الدالة ,,
أو أخيرا المستوى الأعلى على الاطلاق وهو ,,
malloc ,, أو new في السي ++
أرجو أن أكون قد افدتك ,, :)
أما الفروق العملية تتركز في ,,
1) malloc لاتستدعي المشيد كما يفعل ال new ,,
2) malloc لاتحوي آلية لمعالجة الأخطاء داخليا ,,
3) يجب أن تحدد حجم البايتات المراد حجزها حسب كل نوع متغير على حدة ,, يعمي عليك باجراء حسابات الحجم ,,
int * x= (int*)malloc(sizeof(int));
شكرا لك على هذا الرد
المعتبر
ولكن ما هو ال heap الذاكرة التكويمية وما الفرق بينها وبين الاستاتيكية
وكيف يمكن عمل دالة معاملها هو نوع من أنواع الببانات
أي ان تطلب (الدالة هي الفاعل) نوع من انواع البيانات لكي تعمل
عملها المطلوب مثل الدالة malloc
ما هو المشيد الذي تستدعيه new
وماذا يعني أن malloc لا تحتوي على آلية لتصحيح الأخطاء
وماذا يعني أن تكون معامل ال new بارة عبارة عن دالة
وما هو هذا المؤثر <-
وما هي الدالة المقابلة لكلمة delete في c ومن أين أحصل على هذه الدالة
_CrtMemBlockHeader
واشرح لي هذا الكود الذي كتبه أنت
وعذرا على التطويل في الاسئلة
وشكرا لك على تفاعلك معي
اقتباسما هو المشيد الذي تستدعيه new
المشيد الخاص بالفئة التي نريد أن نحجز لها ,, وليس للأنواع الأساسية,,
اقتباسوماذا يعني أن تكون معامل ال new بارة عبارة عن دالة
ماذا تقصد ؟
اقتباسوما هو هذا المؤثر <-
لاستدعاء الاعضاء الدالية ,, والمتغيرات داخل الفئة ,,
اقتباسوما هي الدالة المقابلة لكلمة delete في c
free()
اقتباسومن أين أحصل على هذه الدالة_CrtMemBlockHeader
موجودة مع نظام التشغيل في احدى ملفات ال dll ,, ولم أبحث عنه لاستدعاء الدالة بشكل ديناميكي ,, لكن يكفي للضمان أن تعرف الملف stdlib.h في الأعلى وسيعمل باذن الله ,,
اقتباسولكن ما هو ال heap الذاكرة التكويمية وما الفرق بينها وبين الاستاتيكية
راجع الرابط ,,
اقتباسوكيف يمكن عمل دالة معاملها هو نوع من أنواع الببانات
int MYFunc(int x,int y,double z)
اقتباسواشرح لي هذا الكود الذي كتبه أنت
سأجيبك قريبا ,,
تم تعديل هذه المشاركة بواسطة HGB في 15 مايو 2004 في 00:25
هذا الموضوع مغلق.