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

مشكلة (الله أعلم) في الذاكرة

مغلق
بدأه PerfectStranger في 29 أبريل 2003 · 1 رد · 647 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

المشكلة في الحقيقة لا أعرفها و هذا يجعل حلها أو حتى وصفها لكم أمر صعب

باختصار بدأت تظهر لدي رسائل أخطاء أثناء تنفيذي لمشروع الأخطاء هي Access Violation و لكنها ليست من النوع الذي يظهر عند الدخول إلى موشر غير محدد مثلا كما أن الرسالة من النوع information و ليس من النوعdebugger Exception فالرسالة التي تظهر هي:

Project anything faulted with message access violation at ....

و ليس

project anything.dpr rised exception class EAccessViolation with message Accessviolation ...

بدأت تظهر هذه الرسالة مع كل استدعاء للتابع SetLength الخاص بالسلاسل و المصفوفات الديناميكية و هذة الرسالة توقف البرنامج عن العمل ثم بدأت تظهر مع عمليات انشاء ال FileStreams أي مع f:=TFileStram.create و ثم تفاقم الوضع حتى أصبحت تظهر مع استدعاءات للتوابع العادية من وحدات أخرى

أعتقد أن المشكلة مع الذاكرة فقررت وضع متحول من النوع THeapStatus و استدعاء التابع GetHeapStatus لمراقبة الكومة و ما يجري هناك و لكن كانت النتيجة أن الرسالة الرائعة قد ظهرت عند استدعاء التابع GetHeapStatus :'( و انتهت القصة بضحية و هو الكيبورد :'( نتيجة الغضب (الله يعافينا منه جميعا)

أرجوا من اخواني أصحاب الخبرة في الديلفي مساعدتي بسرعة لأنه علي تسليم المشروع غدا :'( و الله يجزيكم ألف خير

#2

كلامك على مااظن صحيح

وعلى مااعتقد

انك كنت تريد حجز مصفوفة من البايتات للتعامل معها داخل الملف

ولكن على مااعتقد ان السجل الذي اسندته لم يكن يعرف حجم المصفوفة التي اسندتها !

وهذه الطريقة لكي يستفيد منها الجميع في تحديد كل البايتات المراد عمل عليها إجراءات من الملف

procedure TForm1.ButtonCombineClick(Sender: TObject);
var
  i: Integer;
  s: array[1..5] of string;
  size: Integer;
  Stream: TMemoryStream;
begin
  for i := Low(FileList) to High(FileList) do
  begin
    {Load files into strings}
    if FileExists(FileList) then
    begin
      Stream := TMemoryStream.Create;
      try
        Stream.LoadFromFile(FileList);
        SetLength(s, Stream.Size);
        Stream.Read(s[1], Stream.Size)
      finally
        Stream.Free
      end
    end
    else
      s := '';
  end;
end;

ومن لديه طريقة افضل ياريت يوافينا بها

أما بالنسبة للتعامل مع SetLength

var
  S: string;
begin
  SetLength(S, MemStream.Size);
  MemStream.Read(S[1], MemStream.Size);
end;

عذرا على التاخر:o

فقد كنت ابحث عن الاجابة (f)

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

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