نمایش نتایج 1 تا 2 از 2

نام تاپیک: "how to resolve "debug assertion failed

  1. #1

    Question "how to resolve "debug assertion failed

    سلام به برنامه نویسان بسیار حرفه ای و حرفه ی و نیمه حرفه ای و مبتدی و آماتور(مثل خودم)
    من دارم الگوریتم A* (که مربوط به جستجوی آگاهانه در مبحث هوش مصنوعی هست) رو با ++c پیاده سازی می کنم. البته هنوز کامل نشده. می خوام خروجی بگیرم تا ببینم آیا برنامه تا جایی که نوشتم درست عمل می کنه یا نه؟ اما بعد از کامپایل شدن این خطا ظاهر می شه:متوجه شدم که ایراد کار در قسمت مرتب سازی صف هست. برای مرتب سازی از MergeSort استفاده کردم. قبل از اینکه کدهای لازم رو بذارم بزارین اینو بهتون بگم:
    در قسمتی که قراره گره با کمترین هزینه بسط داده بشه، در ابتدا فقط این شرط رو بررسی کرده بودم که الگوریتم فقط گره هایی رو بسط بده(به صف اضافه کنه) که مسیر باز باشه( در نقشه ی من 1 یعنی مسیر باز)مثلا:
    if (matrix[x][y + 1] == 1)
    Node n1(1, x, y + 1, desx, desy, depth, n);
    q -> AddQueue(n1);
    وقتی که خروجی گرفتم دیدم همه چیز درست کار کرده. گره ها به شکل درستی به صف اضافه شدن، مرتب سازی درست انجام شده و کلا همه چیز OK بود. اما وقتی که به شرط بالا این مورد رو هم اضافه کردم که گره هایی که قبلا بررسی شدن و از صف حذف شده بودن، دوباره اضافه نشن، این مشکل شروع شد. تابع بسط من به این صورته:
    void expand(Node n, Node array_node[8], int desx, int desy, Queue *q)
    q به صف اشاره می کنه. در این تابع من تابعی به نام similar رو فراخونی کردم. این تابع هم به این شکل:
    bool similar(int i, int j, Queue *qu)
    نحوه فراخوانی این تابع در expand به این صورت:
    similar(x, y + 1, &q);
    دیدم خطا ظاهر شد، بی خیال اشاره گر شدم و مقدار صف رو داخل یک صف دیگه کپی کردم:
    bool similar(int i, int j, Queue qu
    similar(x, y + 1, *q);
    دیدم دوباره اون پیغام بالا ظاهر شد. به این صورت تغییر دادم:
    bool similar(int i, int j, Queue *qu)

    similar(x, y + 1, &(*q));
    گفتم این بار دیگه حله. چون داشتم از یه اشاره گر دیگه به همون صف استفاده می کردم. اما بازم همون آش و همون کاسه.. خواستم با لگد برم تو لپ تاپ بعد یادم اومد الان دیگه نمیشه لپ تاپ خرید. خلاصه جونم بهتون بگه رفتم سراغ trace کردن. این جا بود که دیگه برق از سرم پرید. دیدم مشکل similar حل شده و ایراد از تابع مرتب سازیمه. تابعی که داشت درست عمل می کرد! مشکل اونجا هم مربوط به همین اشاره گر ها بوده. کد تابع مرتب سازیم رو پایین ملاحضه کنین.برای مثال فرض کنین که دارین یک صف ۶ عنصری رو مرتب می کنین. صف اول به ۲ قسمت چپ و راست ۳ عنصری تبدیل و بعد صف چپیه به ۲ قسمت ۱ عنصری(چپ) و ۲ عنصری(راست) تقسیم میشه. وقتی که MergeSort برای صف چپی(۱ عنصری) فراخوانی میشه و از این تابع بر میگرده خطا اتفاق می افته و پیغام بالا ظاهر میشه.
    void MergeSort(int size, Queue *q)

    {
    int left_size = size / 2;
    int right_size = size - left_size;
    Queue left(left_size), right(right_size);
    int i;
    int f = q -> GetFront() + 1;


    if (size > 1)
    {
    for (i = 0; i < left_size; i++)
    {
    left.AddQueue(q -> GetNode(f));
    f++;
    }
    for (i = 0; i < right_size; i++)
    {
    right.AddQueue(q ->GetNode(f));
    f++;
    }


    MergeSort(left_size, &left);
    MergeSort(right_size, &right);
    merge(left_size, right_size, left, right, q);
    }
    }
    void merge(int left_size, int right_size, Queue left, Queue right, Queue *q)
    {
    int i, j, r;
    i = 0;
    j = 0;
    r = q -> GetRear() - (left_size + right_size);
    q -> SetRear(r);
    while (i < left_size && j < right_size)
    {
    if (left.GetNode(i).getTotal() < right.GetNode(j).getTotal())
    {
    q -> AddQueue(left.GetNode(i));
    i++;
    }
    else
    {
    q -> AddQueue(right.GetNode(j));
    j++;
    }
    }
    if (i >= left_size)
    while (j < right_size)
    {
    q ->AddQueue(right.GetNode(j));
    j++;
    }
    else
    while (i < left_size)
    {
    q ->AddQueue(left.GetNode(i));
    i++;
    }
    }
    اگه خوب نتونستم توضیح بدم منو ببخشین... هر جا ابهامی هست بهم بگین. فقط امیدوارم جوابم رو بگیرم

  2. #2

    نقل قول: "how to resolve "debug assertion failed

    یعنی یه نفر نیست جواب سوالم رو بده!!!!!!!؟؟؟ حداقل یه راهنمایی کوچیک! خواهشا یک کمک برسونه

تاپیک های مشابه

  1. سوال: من کتاب "how to program :++c"را خریدم...
    نوشته شده توسط sahand_hellboy در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 3
    آخرین پست: یک شنبه 23 اسفند 1388, 09:16 صبح
  2. How to use "joomlapack" component
    نوشته شده توسط mrrajabi در بخش PHP
    پاسخ: 0
    آخرین پست: سه شنبه 23 تیر 1388, 12:08 عصر
  3. How to Disable "this Computer" logon in Domain
    نوشته شده توسط hemaseh5576 در بخش شبکه و Networking‌
    پاسخ: 1
    آخرین پست: پنج شنبه 04 خرداد 1385, 10:30 صبح
  4. "ctrl+alt+del"
    نوشته شده توسط Mahnazmh در بخش برنامه نویسی در 6 VB
    پاسخ: 3
    آخرین پست: شنبه 15 اسفند 1383, 06:34 صبح
  5. یک درخواست فوری از دوستان موضوع"SKFE و VFarsi "
    نوشته شده توسط 123456789 در بخش برنامه نویسی در Delphi
    پاسخ: 1
    آخرین پست: شنبه 05 دی 1383, 09:44 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •