我在林锐的高质量C++编程的时候,特地调试了这个程序:
int main(int argc, char* argv[])
{
char *sz = new char[100];
printf("%08x,%s/n",sz,sz);
strcpy(sz,"hello");
printf("%08x,%s/n",sz,sz);
delete[] sz;
printf("%08x,%s/n",sz,sz);
/add
char * p = new char[10];
if(sz!=0)
{
strcpy(sz,"world");
printf("%08x,%s/n",sz,sz);
}
return 0;
}
按照以前的内存管理的知识分析,sz指向 的地址被delete后,还用strcpy往这个地址上写数据的话,应该会出错才对啊,可程序运行的结果好好的。林锐在书中说,篡改动态内存内容,结果不可预料,我想了很久,想不明白,希望哪位大侠给我点播一下,谢谢!
int main(int argc, char* argv[])
{
char *sz = new char[100];
printf("%08x,%s/n",sz,sz);
strcpy(sz,"hello");
printf("%08x,%s/n",sz,sz);
delete[] sz;
printf("%08x,%s/n",sz,sz);
/add
char * p = new char[10];
if(sz!=0)
{
strcpy(sz,"world");
printf("%08x,%s/n",sz,sz);
}
return 0;
}
按照以前的内存管理的知识分析,sz指向 的地址被delete后,还用strcpy往这个地址上写数据的话,应该会出错才对啊,可程序运行的结果好好的。林锐在书中说,篡改动态内存内容,结果不可预料,我想了很久,想不明白,希望哪位大侠给我点播一下,谢谢!