PDA

View Full Version : مبتدی: وکتورها و الگوریتم کپی



smemamian
دوشنبه 12 فروردین 1392, 10:09 صبح
سلام دوستان

مگر وکتورها پویا نیستند ؟
چرا در برنامه زیر اگر من در خط 19 مقدار 3 را وارد نکنم برنامه بسته می شود ؟!

#include <QCoreApplication>
#include <QString>
#include <QDebug>
#include <QList>
#include <QVector>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

QList<int> List;
List << 1 << 2 << 3 << 6 << 5 ;
qSort(List);
foreach(int i,List)
{
qDebug() << i ;
}
qDebug() << "End" ;
QVector<int> Vector(3);
qCopy(List.begin(),List.end(),Vector.begin());
foreach(int j,Vector)
{
qDebug() << j ;
}


return a.exec();
}

MSK
دوشنبه 12 فروردین 1392, 23:12 عصر
در حقیفت بجای ۳ باید ۵ وارد می‌کردی. الان برنامت یه باگ جدی داره. :لبخند:
مسئله اینجاست که مفهوم پویا بودن اینه که اگه بهش عضوی رو اضافه کنی طولش اضافه میشه. اما qCopy اعضا رو اضافه نمی کنه. کپی می کنه!! :لبخند:
در نتیجه باید آرایه مقصدت به اندازه کافی از قبل جا داشته باشه، که در این مورد ۵ تاست. :-)

smemamian
سه شنبه 13 فروردین 1392, 09:47 صبح
بله درست هست باید 5 رو وارد کنم... باگ بخاطره چی ؟

alamate_aoal
یک شنبه 25 فروردین 1392, 17:59 عصر
سلام


باگ بخاطره چی ؟
آب موجود در بطری 5 لیتری رو که نمیشه در 3 لیتری جا داد, میشه؟

MSK
پنج شنبه 29 فروردین 1392, 17:29 عصر
به این باگ میگن buffer overflow (http://en.wikipedia.org/wiki/Buffer_overflow). البته من نمی‌دونم شاید جلوی این باگ رو در qcopy گرفته باشند. اما در هرصورت این باگ ریشه ۹۹ درصد از تمام حفره های امنیتی و حک ها و ویروس هاست!!