读书人

C++内存储器分配那些事

发布时间: 2013-03-21 10:08:17 作者: rapoo

C++内存分配那些事


#include "stdafx.h"#include <iostream>using namespace std;void GetMemory1(char* p,int num){p=new char[num];}//如果非得要用指针参数去申请内存,那么应该改用“指向指针的指针”void GetMemory2(char** p,int num){*p=new char[num];}//或者改用“指向指针的引用”void GetMemory3(char* &p,int num){p=new char[num]; }//或者改用函数返回值类传递动态内存char* GetMemory4(int num){char *p=new char[num]; return p;//必须放回的是堆内存存储区,静态全局存储区,或者返回只读的常量存储区}char* GetMemory5(){char p[]="hello world";//数组p是栈内存,没有用new,"hello world"给数组p赋值,数组p是被分配连续的内存空间 return p;//return语句返回不能是指向"栈内存"的指针,因为该内存在函数结束时自动消亡}char* GetMemory6(){char* p="hello world";//"hello world"是字符串常量,位于常量存储区,它在程序生命期内恒定不变。无论什么时候调用GetMemory6,它返回的始终是同一个“只读”的内存块。return p;}void test(){// char* str=NULL;// GetMemory1(str,100);//str仍然为NULL// strcpy(str,"hello");//运行有误// cout<<str<<endl;// delete [] str; // str=NULL;// char* str=NULL;// GetMemory2(&str,100);// strcpy(str,"hello");// cout<<str<<endl;// delete [] str; // str=NULL;// char* str=NULL;// GetMemory3(str,100);// cout<<str<<endl;// strcpy(str,"hello");// cout<<str<<endl;// delete [] str; // str=NULL;// char* str=NULL;// str=GetMemory4(100);// strcpy(str,"hello");// cout<<str<<endl;// delete [] str; // str=NULL;// char* str=NULL;// str=GetMemory5();//GetMemory5()返回后str不再是NULL指针,但str的内容不是"hello world",而是垃圾信息,可以是乱码// strcpy(str,"hello");// cout<<str<<endl; char* str=NULL;str=GetMemory6();//GetMemory6()返回的是一个"只读"的内存块cout<<str<<endl; //输出"hello world"strcpy(str,"hello");cout<<str<<endl; }int _tmain(int argc, _TCHAR* argv[]){test();return 0;}

读书人网 >C++

热点推荐