کدنگار

وبلاگ شخصی-آموزشی علی رشیدی

کدنگار

وبلاگ شخصی-آموزشی علی رشیدی

طبقه بندی موضوعی
پیوندهای روزانه
پیوندها

۱ مطلب با کلمه‌ی کلیدی «std::bad_alloc» ثبت شده است

در قسمتی دیگر از پروژه، این بار قرار بود که اطلاعات یک آرایه پویا (که از نوع یک شی بود) را بخوانم و پردازش کنم... خب، مشکل این بود که سایز آرایه نامعلوم بود و هنگام پردازش با خطا مواجه می شد. در واقع کلاسی که من داشتم:


class Test
{
public:
void print()
{
...
}

void setObject(MyObject *obj)
{
object = obj;
}

private:
MyObject *object;
};

خب، ست کردن آرایه که کاری نداشت اما مشکل در تابع print بود، چگونه بدون دانستن سایز آنرا چاپ کنیم؟ اول سرچ کردم و روش مشخصی پیدا نکردم، پس تصمیم گرفتم که ببینم اصلا اگر بخواهیم عضوی خارج از محدوده را بخوانیم چه میشود؟ در تابع پرینت عبارت


cout << object[4].getText();

را وارد کردم و این شی رو با یک آرایه ۴ عضوی ست کردم، و هنگام اجرا متوجه شدم که


terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc

این یک استثنا بود (Exception) و برای کنترل آن راحت می شد از try & catch استفاده کرد. پس پرینت را به این صورت نوشتم:


void print()
{
int i;
bool end;
try
{
i = 0;
while(!end)
{
cout << object[i].getText();
i++;
}
}

catch (const std::bad_alloc&)
{
end = true;
}
}

خیلی ساده، به محض اینکه به اولین عضو خارج از دامنه برسیم، استثنا رخ میدهد و خواندن ارایه متوقف میشود.

  • علی رشیدی