zoukankan      html  css  js  c++  java
  • C/C++ New与Delete (小例子)

    转自:http://blog.csdn.net/chenzujie/article/details/7011639

     

    先来看两段小程序:
    1)、
    #include <iostream.h>
    #include <String.h>
    void main(void)
    {
    char *str1 = "just have fun";
    char *str2 = "happy day";
    char *sTmpPtr = new char[255];
    char *sMyStrPtr = new char[255];
    
    
    strcpy(sTmpPtr, str1);
    strcpy(sMyStrPtr, str2);
    delete  sMyStrPtr ;
    strcpy(sMyStrPtr, sTmpPtr);
    cout << sMyStrPtr << endl;
    }
    2)、
    #include <iostream.h>
    #include <String.h>
    void main(void)
    {
    char *str1 = "just have fun";
    char *str2 = "happy day";
    char *sTmpPtr = new char[255];
    char *sMyStrPtr = new char[255];
    
    
    strcpy(sTmpPtr, str1);
    strcpy(sMyStrPtr, str2);
    delete  sMyStrPtr ;
    sMyStrPtr = sTmpPtr;
    
    cout << sMyStrPtr << endl;
    }
    第一段程序的输出会是乱码,因为delete sMyStrPtr,删除了sMyStrPtr所指向的内存空间,但作为一个指针sMyStrPtr依然存在,却没有指向内存,因此在strcpy里会执行*strDest++=*strSrc++,但strDest没有指向,所以*strDest++=*strSrc++并没有达到复制的效果,输出就乱码了。
    在第二段程序,delete之后,又把sTmpPtr赋值给了sMyStrPtr,sMyStrPtr有了指向,指向sTmpPtr的内存空间,所以可以正常输出。
  • 相关阅读:
    【排序】紧急集合
    Tallest Cow(线段树较易)
    递归实现排列型枚举
    文件输入输出文件
    【分治】逃亡
    折半查找法(二分)
    递归/非递归实现组合型枚举(全排列问题)
    9.25DAY1T2
    9.25DAY1T1
    POI2004[MOS] 贪心+DP
  • 原文地址:https://www.cnblogs.com/qbmiller/p/3797045.html
Copyright © 2011-2022 走看看