الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اكتشف العلة! بلغة ++c لمحبي مشاكل المؤشرات فقط!

مغلق
بدأه Khaled.Alshaya في 19 فبراير 2008 · 7 رد · 2,316 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم,

هل تذكرون برنامج التشفير!

أول دالة قمت بكتابتها كانت دالة إنتاج مفتاح التشفير,

الدالة بسيطة إلى أبعد الحدود, الدالة تقوم بكتابة مصفوفة من الأعداد العشوائية إلى ملف لا أكثر,

و لكن!

أول مرة كتبت الدالة كاد أن يشيب شعر رأسي بسببها!

كل ذلك بسبب غلطة مطبعية قمت بها في الدالة :D

لم أنتبه للأمر إلا لاحقاً و قمت بحل المشكلة!

المهم هذه هي الشفرة :

void GeneratePass( const char* passPath, size_t units ){

  std::ofstream passFile;
  size_t *pass = new size_t[units];

  srand( __time32_t(NULL) );

  for( size_t C = 0; C < units; C++ )
	pass[C] = rand();	

  passFile.open( passPath, std::ios::binary );
  passFile.write( reinterpret_cast<char*>(&pass), units * sizeof(size_t) );
  passFile.close();

  delete[] pass;

  return;
}

البرنامج سيعمل بشكل سليم دون ظهور أخطاء, و لكن!

قم بتشغيل البرنامج و انظر للملف الناتج و هو مفتاح التشفير المفترض و انظر للبيانات الموجودة فيه!

الحقيقة أني اكتشفت الخطأ من خلال الإطلاع على الملف الناتج و ليس من خلال مراقبة الدالة نفسها!

بعد النظر للملف الناتج بالمفكرة أو أي محرر نصوص! قل لي ماذا تلاحظ !

إذا اكتشفت العلة, وقتها يمكنك أن تخبرني بالخطأ الموجود في الدالة ؟!

هذا التحدي للمحترفين فقط و لا يسمح للمبتدئين بالإقتراب :P

شفرة البرنامج كاملة في المرفقات, البرنامج يقوم بإنتاج ملف يحوي بيانات عشوائية حجم الملف الناتج 4 kilobytes!

main.rar

تحياتي,,

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 19 فبراير 2008 في 07:16

#2

السلام عليكم

========

الشيفرة لو ماكون مشرفة عليها ومتابعتها من بداية كتابة Pseudocode تبعتها, بكون بطيئة أو غير محددة اثناء اصطياد الأخطاء فيها. B) هذا واحد. ثانياً كامل المشروع مني قادرة افتحه, بسبب الإصدار تبعه غير متوافق مع الإصدار الموجود عندي بالجهاز ولما اخذت الملف المصدر ونقلته بمشروع جديد تعارض ايضاً مع اصداري. ثالثاً دوبني برتب حالي B) لكن لو صارت فرصة رايحة اكتشفه بالظهر او العصر إن شاء الله :rolleyes: .

بالنهاية الفكرة صحيحة لازم المبتدئيين يبعدوا عن الموضوع, واللي مثلي ينسخوا كلامي ويكتبوه :lol:

جالسة امزح بس,,البرامج مثل هذي بحلها وانا رايحة بطريقي للسوبر ماركت :wacko:

=============

تمنياتي لكم بالتوفيق

تم تعديل هذه المشاركة بواسطة رغـــــــــد في 19 فبراير 2008 في 05:11

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#3

السلام عليكم أخت رغد,

قمت بتحميل الشفرة من جديد في الموضوع الأصلي بعد تعديلها, ستعمل بإذن الله دون مشاكل هذه المرة,

على كل حال أنا أستخدم حالياً Visual C++2008 Express لأنه أعجبني كثيراً منذ أن تخليت عن مترجم GNU :)

الشيء الوحيد الذي أود التنبيه له هو دالة الحصول على الوقت :

__time32_t(NULL)

إذا لم تكن تستخدم مترجم VC فقم باستبدال الدالة السابقة بالدالة التالية :

time_t(NULL)

تحياتي ,

#4

السلام عليكم اخي خالد...

يبدو ان الخطاء في &pass فهي عبارة عن عنوان المؤاشر في الذاكرة

( _ /)

(='.'=)

(")-(")

#5

السلام عليكم ,,

أهلاً أمين :

اقتباس
يبدو ان الخطاء في &pass فهي عبارة عن عنوان المؤاشر في الذاكرة

B)

جميل جداً و الإجابة صحيحة,

سنقوم بكتابة البيانات من المكان الذي يوجد فيه ذلك المؤشر بحجم 4kb و هذا ما يظهر لنا بعض النصوص المفهومة في مفتاح التشفير!

عندما انتهيت من كتابة تلك الدالة لم يخطر ببالي أبداً أني سأقع في مثل هذا الخطأ و لكني وقعت :lol:

لأني اعتدت على تحويل عناوين المتغيرات و ليس المؤشرات, و أصبحت العملية شبه تلقائية لدي فوقعت في ذلك الخطأ على ما أعتقد,

عموماً, لم يكن ذلك الخطأ سيئاً إلى ذلك الحد, فهو الذي جعلني اعتقد أن الدالة rand سيئة جداً (هي في الحقيقة سيئة و لكن ليس لذلك الحد :) )

بالنسبة للدالة rand أقصى كمية من البيانات العشوائية يكمن أن تنتجها هي RAND_MAX و هي كمية صغيرة جداً في معظم المترجمات إذا ما قورنت بأحجام الملفات!

تلك كانت أول عقبة في برنامج التشفير!

و هي التي جعلتني استخدم مولد أعداد عشوائية أفضل و صرت استخدمه في برامجي التي أكتبها منذ ذلك الوقت,

تحياتي أخي أمين و خلينا نشوفك على طول معانا لا تطول الغيبات :)

#6

اهلا خالد ..

انا المترجم الذي لدي الان لا يعمل .. اضن انه انجن .. انا قديم جدا في استخداماتي للمترجمات فلحد الان استخدم TC3 .. جدا يعجبني ..

الان عندما اشغله يرجع الى سطح المكتب مرة اخرى .. ولكن لم اعر له اهمية ..

ولكن من دون تنفيذ للكود الذي وضعته اعلاه بمجرد النظر وجدت ان المشكله في &pass .. حيث التعامل هنا سيكون مع عنوان وليس مع قيمة ..

اقتباس
كل ذلك بسبب غلطة مطبعية قمت بها في الدالة

من الممكن ان تعتبر هذه غلطه مطبعية .. ولكنها غلطه مدمرة بعض الشئ ..لانه يوجد اخراج ولكن يختلف عما هو مطلوب ..

تحياتي خالد ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#7
اقتباس
على كل حال أنا أستخدم حالياً Visual C++2008 Express لأنه أعجبني كثيراً منذ أن تخليت عن مترجم GNU

لماذا اخي خالد ؟ ..

لا إله الإ الله وحده لا شريك له الملك وله الحمد يحي ويميت وهو على كل شئ قدير

------------------------------------------------------------------------------------------------

gazabigBanner.jpg

------------------------------------------------------------------------------------------------

#8
اقتباس
انا قديم جدا في استخداماتي للمترجمات فلحد الان استخدم TC3

تعجبني بهذا الرأي أخي العزيز :thumb_up:

بالمناسبة أخي خالد

المرفقات فيها خلل

تم تعديل هذه المشاركة بواسطة mandareka في 21 يناير 2009 في 20:46

دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب

حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .

الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية

الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير

هذا الموضوع مغلق.

مواضيع مشابهة