در برسی کدهای برنامه ای که قبلا نوشته شده بود و ظاهرا در حال حاضر بدرستی کار می کند به صحت عمل تابع مشابه doXOR شک کردم. متن doXOR و روش استفاده شده از آن را در زیر اضافه می کنم. لازم به ذکر است فقط به روش زیر استفاده می شود.
char*doXOR(char*cData1,char* cData2){char cData[256];//for(int i =0; i <256;++i){
cData[i]=cData1[i]^ cData2[i];}//
cData[255]=0;return cData;}void usedoXOR(){char cData1[256];char cData2[256];char cData3[256];//
memset(cData1,0,sizeof(cData1));
memset(cData2,0,sizeof(cData2));
memset(cData3,0,sizeof(cData3));
strcpy(cData1,"In C, the following 6 operators are bitwise operators (work at bit-level)");
strcpy(cData2,"Typical usage of a right shift operator in C can be seen from the following code.");
strcpy(cData3, doXOR(cData1, cData2));}
همانطور که میبینید در doXOR در انتها آدرس cData که یک متغییر محلی است برگشت داده می شود و من انتظار دارم قبل از خارج شدن از doXOR حافظه های اختصاص داده شده آزاد گردد لذا بهد از خروج از doXOR آدرس cData معتبر نخواهد بود اگر چه همچنان حاوی اطلاعات قبلی است.
نظر شما چیست.
1 - نوشتن به این شکل مشکل دارد یا نه؟
2 - اگر مشکلی دارد آیا نحوه استفاده ما در usedoXOR از خروجی doXOR به عنوان ورودی strcpy موجب شده تا این مشکل خود را نشان ندهد؟
3 - آیا نوع کمپایلر و سیستم عامل میتوانند در پاسخ به دو سوال بالا تاثیرگذار باشند.
در برسی کدهای برنامه ای که قبلا نوشته شده بود و ظاهرا در حال حاضر بدرستی کار می کند به صحت عمل تابع مشابه doXOR شک کردم. متن doXOR و روش استفاده شده از آن را در زیر اضافه می کنم. لازم به ذکر است فقط به روش زیر استفاده می شود.
همانطور که میبینید در doXOR در انتها آدرس cData که یک متغییر محلی است برگشت داده می شود و من انتظار دارم قبل از خارج شدن از doXOR حافظه های اختصاص داده شده آزاد گردد لذا بهد از خروج از doXOR آدرس cData معتبر نخواهد بود اگر چه همچنان حاوی اطلاعات قبلی است.
نظر شما چیست.
1 - نوشتن به این شکل مشکل دارد یا نه؟
2 - اگر مشکلی دارد آیا نحوه استفاده ما در usedoXOR از خروجی doXOR به عنوان ورودی strcpy موجب شده تا این مشکل خود را نشان ندهد؟
3 - آیا نوع کمپایلر و سیستم عامل میتوانند در پاسخ به دو سوال بالا تاثیرگذار باشند.
به اشتراک گذاری این ارسال
لینک به ارسال
به اشتراک گذاری در سایت های دیگر