首页 > 代码库 > C/C++ New与Delete (小例子)
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的内存空间,所以可以正常输出。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。