PDA

View Full Version : سوال: Must take address of a memory location یعنی چه؟



mehdimdp
دوشنبه 23 فروردین 1389, 19:58 عصر
سلام
وقت همگی به خیر
من این متغیرهارو برای یک سری تحقیق در رابطه با حافظه نوشته ام.
در پنجره watch وقتی میخوام آدرس اشاره گر mypoint3 رو ببینم با مقدار پیغام Must take address of a memory location مواجه می شوم.
لطفا منو را هنمایی کنید که این پیغام چیست.
با تشکر


#include<iostream.h>
#include<conio.h>
void main()
{
int myint=20;
int myint2=0;
int myint3=0;
float myfloat=0;
float myfloat2=0;
int* mypoint1;
float* mypoint2;
*mypoint2=2.25;
*mypoint1=800;
int* mypoint3=0;
*mypoint3=80;

int* mypoint4=0;
getch;
}


همچنین وقتی خط قرمز رنگ رو پاک می کنم این اشکال برطرف میشه
درضمن برنامه بدون هیچ خطایی کامپایل میشه

sh4mid
دوشنبه 23 فروردین 1389, 20:50 عصر
برای کار با اشاره گر اول باید با new یه فضا تخصیص بدی بعد که کارت باهاش تموم شد با delete پاکش کنی

mehdimdp
دوشنبه 23 فروردین 1389, 20:52 عصر
برای کار با اشاره گر اول باید با new یه فضا تخصیص بدی بعد که کارت باهاش تموم شد با delete پاکش کنی
شما منظور من رو متوجه نشدید.
من فقط میخوام بدونم که چرا فقط برای mypoint3 این اتفاق رخ داده؟

sh4mid
دوشنبه 23 فروردین 1389, 22:13 عصر
والا من عکس رو ندیده بودم ، بماند
این از خطاهای Compilerهای Borland هست
ببین وقتی میای یک خطی مثل این رو تعریف می کنی
int* my_var=0
با این فرقی نداره
int* my_var=NULL
به این میگن مقداردهی اولیه
اما
int* my_var
*my_var=800
معلوم نیست که چه اتفاقی می افتد اینجا تو یه خونه از حافظه که به صورت تصادفی انتخاب شده یه مقداری میریزه حالا معلوم نیست اونجا چی هست Stack برنامه است ، Heap، یه جا تو Process Sapce یا هرجای دیگه . حالا اگر مثلا مقدار مثلا 800 رو تو اون جا بریزه معلوم نیست چی پیش بیاد از یه سیستم به سیستم دیگه یا از یه Compiler به Compiler دیگه و حتی از یه OS به یه OS دیگه فرق میکنه
مثلا همین مثال بالا تو Dev-C بدون مشکل Compile شد
این مدل برنامه نویسی اونم تو TC :متعجب: مشکل و غیرقابل اعتماده
اولا این Compiler خیلی قدیمی و کلا استاندارد ها رو پشتیبانی نمیکنه
ثانیا بیخیال محیط 16bit بشو
اگه می خواهی فقط در حد Console برنامه بنویسی و حوصله این IDE های جورواجور رو نداری از ِDev-c استفاده کن