View Full Version : سوال: راهنمایی در مورد پیغام خطا
Omid707
پنج شنبه 02 شهریور 1391, 07:38 صبح
با سلام
این پیام در باره چیه.درهنگام اجرای برنامه ارور نمیده بعد از تولید فایل خروجی و خارج شدن از تابع main این پیام رو نشون میده.
91711
مسعود اقدسی فام
پنج شنبه 02 شهریور 1391, 11:21 صبح
با سلام
این پیام در باره چیه.درهنگام اجرای برنامه ارور نمیده بعد از تولید فایل خروجی و خارج شدن از تابع main این پیام رو نشون میده.
91711
با اشارهگر و مدیریت حافظه کار کردید؟ مثلا لیست پیوندی یا صف و درخت و ...
Omid707
پنج شنبه 02 شهریور 1391, 22:50 عصر
با اشارهگر و مدیریت حافظه کار کردید؟ مثلا لیست پیوندی یا صف و درخت و ...
بله،یک درخت دارم که داخل فایل ذخیره میشه و بعدا اطلاعات از فایل به حافظه اصلی بارگذاری میشوند نسخه اولیه این برنامه بخوبی کار میکرد بعد عضو داده جدیدی بصورت بردار verctor بهش اضافه کردم تا اینجا همه چیز خوبه اما وقتی این داده ها رو در فایل ذخیره و باز خوانی میکنم این خطا رو میده البته دسترسی به داده ها درج وحذف و هر عملیاتی ممکنه منتها بعد اتمام برنامه و رسیدن به انتهای تابع main این خطا داده میشه
مسعود اقدسی فام
پنج شنبه 02 شهریور 1391, 23:43 عصر
بله،یک درخت دارم که داخل فایل ذخیره میشه و بعدا اطلاعات از فایل به حافظه اصلی بارگذاری میشوند نسخه اولیه این برنامه بخوبی کار میکرد بعد عضو داده جدیدی بصورت بردار verctor بهش اضافه کردم تا اینجا همه چیز خوبه اما وقتی این داده ها رو در فایل ذخیره و باز خوانی میکنم این خطا رو میده البته دسترسی به داده ها درج وحذف و هر عملیاتی ممکنه منتها بعد اتمام برنامه و رسیدن به انتهای تابع main این خطا داده میشه
هر فضایی که گرفتید آزاد شده و هر فایلی که باز کردید بسته شده؟ دسترسی به فضای آزاد شده و NULL شده یا فایل بسته شده ندارید؟
Omid707
جمعه 03 شهریور 1391, 01:09 صبح
هر فضایی که گرفتید آزاد شده و هر فایلی که باز کردید بسته شده؟ دسترسی به فضای آزاد شده و NULL شده یا فایل بسته شده ندارید؟
همیشه فایل رو بعد استفاده میبندم حتی وسط برنامه و اگه لازمش داشتم دوباره بازمیکنم.هر حافظه ای رو هم گرفتم در صورت عدم نیاز آزاد کردم. در واقع مطمئنم که کد اصلی برنامه درسته چون کارمیکنه اما وقتی برای یکسری بهینه سازی ها آرایه ثابت رو با بردار جایگزین کردم این خطا ایجاد شد.
اصلا بک سوال یک بردار چطور در فایل ذخیره میشه برای آموزش عملیات ورودی -خروجی از فایل در مثال های کتابها همیشه یک شی ساده با چند رکورد داده مثال میزنند.
وقتی اولین بار یک شی حاوی اشاره گر رو ذخیره کردم موقع بازیابی متوجه شدم آدرس اشاره گر معتبر نیست خوب خیلی زود خودم متوجه شدم که این منطقیه چون اشاره گر به مکانی در حافظه اصلی اشاره میکنه اما در مورد بردار نمیدونم چرا این اشکال پیش اومده چون اصلا از پیاده سازی داخلی اون اطلاعی ندارم
hadi0x7c7
جمعه 03 شهریور 1391, 01:54 صبح
اما وقتی برای یکسری بهینه سازی ها آرایه ثابت رو با بردار جایگزین کردم این خطا ایجاد شد.
John Bentley's rules for optimization: First law: don't do it. Second law (for experts only): don't do it yet
وکتور هم از پوینتر استفاده میشه واسه پیاده سازیش. و از روشی به نام dynamic table نه لیست پیوندی
. یعنی هر بار که پر شد اندازش دوبرابر میشه که پیچیدگی این عمل به صورت amortized از مرتبه ی o(n) هستش.
اینم یه پیاده سازیش واسه double از خود Bjarne Stroustrup
// an almost real vector of doubles:
class vector {
/*
invariant:
for 0<=n<sz elem[n] is element n
sz<=space;
if sz<space there is space for (space-sz) doubles after elem[sz-1]
*/
int sz; // the size
double* elem; // pointer to the elements (or 0)
int space; // number of element plus number of free slots
public:
vector() : sz(0), elem(0), space(0) { }
vector(int s) :sz(s), elem(new double[s]), space(s)
{
for (int i=0; i<sz; ++i) elem[i]=0; // elements are initialized
}
vector(const vector&); // copy constructor
vector& operator=(const vector&); // copy assignment
~vector() { delete[ ] elem; } // destructor
double& operator[ ](int n) { return elem[n]; } // access
const double& operator[ ](int n) const { return elem[n]; }
int size() const { return sz; }
int capacity() const { return space; }
void resize(int newsize); // growth
void push_back(double d);
void reserve(int newalloc);
};
//------------------------------------------------------------------------------
void vector::reserve(int newalloc)
{
if (newalloc<=space) return; // never decrease allocation
double* p = new double[newalloc]; // allocate new space
for (int i=0; i<sz; ++i) p[i] = elem[i]; // copy old elements
delete[ ] elem; // deallocate old space
elem = p;
space = newalloc;
}
//------------------------------------------------------------------------------
void vector::resize(int newsize)
// make the vector have newsize elements
// initialize each new elements with the default value 0.0
{
reserve(newsize);
for (int i=sz; i<newsize; ++i) elem[i] = 0; // initialize new elements
sz = newsize;
}
//------------------------------------------------------------------------------
void vector::push_back(double d)
// increase vector size by one; initialize the new element with d
{
// no more free space: get more
if (space==0)
reserve(8);
else
if (space==sz)
reserve(2*space);
elem[sz] = d; // add d at end
++sz; // increase the size (sz is the number of elements)
}
//------------------------------------------------------------------------------
vector& vector::operator=(const vector& a)
{
if (this==&a) return *this; // self-assignment, no work needed
if (a.sz<=space) { // enough space, no need for new allocation
for (int i = 0; i<a.sz; ++i) elem[i] = a.elem[i]; // copy elements
sz = a.sz;
return *this;
}
double* p = new double[a.sz]; // allocate new space
for (int i = 0; i<a.sz; ++i) p[i] = a.elem[i]; // copy elements
delete[ ] elem; // deallocate old space
space = sz = a.sz; // set new size
elem = p; // set new elements
return *this; // return a self-reference
}
//------------------------------------------------------------------------------
int main()
{
vector v;
v.reserve(10);
v.resize(4);
v.push_back(7);
vector a;
a = v;
return a.capacity();
}
//------------------------------------------------------------------------------
Omid707
جمعه 03 شهریور 1391, 20:38 عصر
John Bentley's rules for optimization: First law: don't do it. Second law (for experts only): don't do it yet
یعنی از بردار استفاده نکنیم؟!! بد شد چون ساختار ساده و سر راستی داره با کلی توابع آماده.
اینم یه پیاده سازیش واسه double از خود Bjarne Stroustrup
خیلی جالبه از آرایه پویا استفاده کرده، نسبت به لیست پیوندی خیلی ساده تره و امکان دسترسی تصادفی هم میده ولی اسم آرایه های ثابت هم اشاره گری به اولین عنصر آرایه ست پس چطور موقع کار با آرایه خطا تولید نمیشد؟
خوب کسی میدونه چطور یه شی حاوی بردار رو باید بطور صحیح ذخیره و بازیابی کرد شاید بتونم با همین وکتور به توافق برسم والا مجبورم لیست پیوندی بزارم که مثل نقل و نبات پوینتر داره
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.