一.new char与delete问题1. 问题程序[cpp] view plaincopy #includeusing namespace std; void main() { char* des = new char(); des = "testing!"; cout< < using namespace std; void main() { char* des = new char[10]; memset(des, 0, 10); strcpy(des, "testing!"); cout << des << endl; delete des; } V2 严格版 [cpp] view plaincopy #include using namespace std; void main() { char* des = new char[10]; memset(des, 0, 10); strcpy(des, "testing!"); cout << des << endl; delete[] des; // new[]和delete[]对应。但由于char是基本数据类型,所以6楼那样写应该也是没有问题的 } 二.new int与delete1. 程序[cpp] view plaincopy #include using namespace std; void main() { //一维整型指针 int *a = new int [2]; for (int i=0;i<2;i++) { a[i] = 1; } for (int i=0;i<2;i++) { printf("%d \n",a[i]); } delete[] a; //二维整型指针 int **b = new int *[2]; for (int i=0;i<2;i++) { b[i] = new int [2]; } for (int i=0;i<2;i++) { for (int j=0;j<2;j++) { b[i][j] = 2; } } for (int i=0;i<2;i++) { for (int j=0;j<2;j++) { printf("%d ",b[i][j]); } printf("\n"); } for (int i=0;i<2;i++) { delete[] b[i]; } delete[] b; system("pause"); } 2. 程序运行正常 除char以外的基本数据类型,在进行指针释放时一般不用考虑太多,主要是因为没有字符串的赋值(实质是地址的赋值)。 三.小结 在new的类型中,涉及到地址赋值,要千万小心!四、使用陷阱new和delete成对使用,避免内存泄露,申请内存数组时使用的"[]"而非“()”。如下:char * szData=new char(100); (错误)char *szData=new char[100];(正确)
int**a = new int*[2]; for(int i=0;i<2;i++){ *(a+i) = new int[3]; //a[i] = new int[3]; for(int j=0;j<3;j++){ *(*(a+i)+j) = j; //a[i][j] = j; } } for(int i=0;i<2;i++){ for(int j=0;j<3;j++){ cout<<"a["<<<"]["<<<"]="<<*(*(a+i)+j)<