黑马程序员-java语言特点2:对取消指针的理解

        指针是c、c++程序最容易出错的地方,程序崩溃大部分原因在于指针操作bug,往往出错了很难定位,例如有一段c程序:
            /**上面有若干行c代码**/
            int *p;
            p = (int *)malloc(10*sizeof(int));
            for(i=0;i<end; i++) //end是一个变量
                *p++ = 0;
            /**下面有若干行c代码**/
                   .......
            a = index[n];    //index是一个整型数组
        如果这段程序在前面不对end取值做检查,则极易出错。当end>10时,数组越界,在unix中可能出现Segment Violantion错误,在windows中可能“死机”。注意这里只是可能,而我们往往会遇到这样的情况,这段程序在调试器里运行正常,一旦出了调试工具就不行。我们常常会为这种情况伤透脑经,就拿上面这段程序为例,在调试器中,p[10]存储的是一段不重要的数据,所以不会出错。而出了调试器,p[10]存储一个重要的int型变量n的值。这一段程序破坏了n的值,从而导致index[n ]访问错误,我们一般很难发现是p[10]修改了n的值。
        由于java取消了struct,数组和字符串都被当作对象,无需再保留指针机制。java自动处理对象的引用。另外,内存自动回收也是java的重要特色,它把程序员从复杂的内存管理中解救出来。恰恰是java采取了以上措施,使程序员彻底指针悬挂,非法指针引用,内存丢失的困扰中解脱出来 。


    详细请查看:http://edu.csdn.net/heima

posted @ 2012-04-16 17:27  lcode  阅读(456)  评论(0编辑  收藏  举报