• 0
tonic.gpl

جدول ديناميكي قياسي

سؤال

السلام عليكم

اولا انا خبرتي في سي ضئيلة

حاولت تقليد الدالة SetLength كما في دلفي .التي تقوم بتهيئة الجداول اي كان نوعها

طبعا هناك بدائل في سي بلاس بلاس مثل vector . لكني اردت ان استخدم malloc و realloc


template <typename T>
void SetLength(T * t , int len)
{
if (!t)
t = (T*)malloc(len*siezof(T));
else
t = (T*)realloc(t , len*sizeof(T));
}

ارجو المساعدة في تصحيح الكود

تم تعديل بواسطه fouad2008
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

6 إجابة على هذا السؤال .

  • 0

لما تستخدم malloc و realloc التابعين للسي داخل كود سي بلس بلس يتم إستخدام ال templates فيه؟ ليست هذه طريقة جميلة أبداً لكتابة كود

أيضاً عن الإنتقال من لغة إلى أخرى ، لا تحاول أن تكتب كود اللغه القديمة بإستخدام الSyntax الخاص باللغه الجديده ، حاول أن تتعلم الفلسفة وراء اللغه الجديده أولاً لكي تستغل امكانياتها جيداً و بصورة جميلة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذا الكود يعمل معى بنجاح وبدون مشاكل فى بيئة كود بلوك-ابينتو 11.10

#include <iostream>
#include <stdlib.h>
using namespace std;

template <typename T>
void SetLength( T *t , int len)
{
if (!t)
t = (T *) malloc(len * sizeof(T));
else
t = (T*)realloc(t , len*sizeof(T));
}
int main(void)
{
return 0;
}

أذا كانت هناك اخطاء اذكرها

تم تعديل بواسطه محمد ابوزايد
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
ليست هذه طريقة جميلة أبداً لكتابة كود

معك حق . لكني حاولت بستخدام *void ولم تنجح .

هذا الكود يعمل معى بنجاح وبدون مشاكل فى بيئة كود بلوك-ابينتو 11.10

انت لم تستدعي الدالة بعد في main . لذلك لم ترى الخطأ

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أنا حاولت ان اصحح الكود من وجهتة نظرك انت على نفس المسار الذى كودتة انت.

من الطبيعى ان ترجع الدالة setLength مؤشر للمكان الذى احتجزتة فى الذاكرة

ومن ايضا من الطبيعة ان نستخدم كلمة new بدﻻ من malloc ............ الخ.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

لقد عدلت الكود ووضعت بعض الأمتلة حول كيفية إستخدام الدالة SetLength

#include <iostream>
#include <cstdlib>
using namespace std;
template <typename T>
T * SetLength( T * t, int len)
{
t = (T*) realloc(t , len * sizeof(t));
return t;
}
int main(int argc, char *argv[])
{
// we declare pointers to point to our arrays
int * intPointer = NULL;
char * charPointer = NULL;


// craeate blocks of memory
intPointer = SetLength <int> (intPointer, 3);
charPointer = SetLength <char> (charPointer, 2);

charPointer[0] = 'f';
charPointer[1] = 'c';

intPointer[0] = 14;
intPointer[1] = 1;
intPointer[2] = 11;

//Loop for displaying int array
for( int a = 0; a < 3; a++)
{
cout << intPointer[a] << endl;
}

//Loop for displaying char array.
for(int itr = 0; itr < 2; itr++)
{
cout << charPointer[itr] << endl;
}


return 0;
}

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكور اخ biginner2000 على الاجابة

لكن لا ادري ان كانت realloc تستدعي ال constructor للاصناف ام لا

سأجرب ذالك لاحقا.

شكرا مرة اخرى

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .