// ACM_Easy.cpp : Defines the entry point for the console application. //C语言动态内存分配 /* 伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody. — Bill Gates 1981 */ //E:/ACM/ACM_Easy/Debug/ACM_Easy.exe ///测试数据 /** Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。 C:/Users/Snshine>E:/ACM/ACM_Easy/Debug/ACM_Easy.exe 现在,请输入两个数m,n来构造一个二维数组:10 10 12 23 43 23 12 56 23 12 65 23 98 89 78 67 56 87 98 92 57 87 12 34 65 33 23 45 65 45 23 23 98 32 12 56 43 15 26 46 32 23 87 50 90 78 98 78 67 56 54 85 45 65 94 64 61 95 69 55 98 55 89 79 56 62 32 65 65 68 94 67 20 30 60 60 60 65 69 69 49 45 28 26 45 85 85 36 31 61 96 41 52 62 92 82 72 56 21 10 11 19 输出构造的数组为: 12 23 43 23 12 56 23 12 65 23 98 89 78 67 56 87 98 92 57 87 12 34 65 33 23 45 65 45 23 23 98 32 12 56 43 15 26 46 32 23 87 50 90 78 98 78 67 56 54 85 45 65 94 64 61 95 69 55 98 55 89 79 56 62 32 65 65 68 94 67 20 30 60 60 60 65 69 69 49 45 28 26 45 85 85 36 31 61 96 41 52 62 92 82 72 56 21 10 11 19 pi指向空. 无需再销毁 现在,请再输入两个数m,n来构造一个二维数组10 10 12 23 43 23 12 56 23 12 65 23 98 89 78 67 56 87 98 92 57 87 12 34 65 33 23 45 65 45 23 23 98 32 12 56 43 15 26 46 32 23 87 50 90 78 98 78 67 56 54 85 45 65 94 64 61 95 69 55 98 55 89 79 56 62 32 65 65 68 94 67 20 30 60 60 60 65 69 69 49 45 28 26 45 85 85 36 31 61 96 41 52 62 92 82 72 56 21 10 11 19 输出构造的数组为: 12 23 43 23 12 56 23 12 65 23 98 89 78 67 56 87 98 92 57 87 12 34 65 33 23 45 65 45 23 23 98 32 12 56 43 15 26 46 32 23 87 50 90 78 98 78 67 56 54 85 45 65 94 64 61 95 69 55 98 55 89 79 56 62 32 65 65 68 94 67 20 30 60 60 60 65 69 69 49 45 28 26 45 85 85 36 31 61 96 41 52 62 92 82 72 56 21 10 11 19 现在,增加m,n的值:m += p,n += q;输入p,q的值:2 2 22 33 66 55 44 66 99 88 77 12 12 43 54 45 66 37 32 12 82 32 12 23 45 65 78 58 15 25 45 65 78 11 11 45 55 58 61 19 77 87 91 96 90 21 输出构造的数组为: 12 23 43 23 12 56 23 12 65 23 12 23 98 89 78 67 56 87 98 92 57 87 45 65 12 34 65 33 23 45 65 45 23 23 78 58 98 32 12 56 43 15 26 46 32 23 15 25 87 50 90 78 98 78 67 56 54 85 45 65 45 65 94 64 61 95 69 55 98 55 78 11 89 79 56 62 32 65 65 68 94 67 11 45 20 30 60 60 60 65 69 69 49 45 55 58 28 26 45 85 85 36 31 61 96 41 61 19 52 62 92 82 72 56 21 10 11 19 77 87 22 33 66 55 44 66 99 88 77 12 91 96 12 43 54 45 66 37 32 12 82 32 90 21 pi指向空. 无需再销毁 请按任意键继续. . . **/ #include "stdafx.h" #include "iostream" #include "stdio.h" #include "stdlib.h" #include "string.h" #define INIT_MAX 1000 #define NOTICE_POINT fprintf(stderr,"Insufficient memory.");/ exit(EXIT_FAILURE);/ using namespace std; void DisplayTDArray(int **pi,int m,int);//输出构造的二维数组 void CreateByMalloc(int **&pi,int m,int n); void CreateByCalloc(int **&pi,int m,int n); void AddByRealloc(int **&pi,int &m,int &n,int p,int q); void DestoryByFree(int **&pi,int m); int _tmain(int argc, _TCHAR* argv[]) { int m,n,p,q; int **pi = NULL; cout<<"现在,请输入两个数m,n来构造一个二维数组:"; //scanf("%d%d",&m,&n); cin>>m>>n; CreateByMalloc(pi,m,n); DisplayTDArray(pi,m,n); DestoryByFree(pi,m); DestoryByFree(pi,m); cout<<"/n/n现在,请再输入两个数m,n来构造一个二维数组"; cin>>m>>n; CreateByCalloc(pi,m,n); DisplayTDArray(pi,m,n); cout<<"/n现在,增加m,n的值:m += p,n += q;输入p,q的值:"; cin>>p>>q; AddByRealloc(pi,m,n,p,q); DisplayTDArray(pi,m,n); DestoryByFree(pi,m); DestoryByFree(pi,m); system("PAUSE"); return 0; } void DisplayTDArray(int **pi,int m,int n) { if(pi) { cout<<"输出构造的数组为:"<<endl; for(int i = 0;i < m;i++) { if(!pi[i]) { cout<<"内存分配失败:"<<endl; break; } for(int j = 0;j < n;j++) { cout<<pi[i][j]<<' '; } cout<<'/n'; } } else { cout<<"内存分配失败:"<<endl; } } void CreateByMalloc(int **&pi,int m,int n) { pi = (int**)malloc(m*sizeof(int*)); if(!pi) { NOTICE_POINT; } for(int i = 0;i < m;i++) { pi[i] = (int*)malloc(n*sizeof(int)); if(!pi[i]) { NOTICE_POINT; } for(int j = 0;j < n;j++) { cin>>pi[i][j]; } } } void CreateByCalloc(int **&pi,int m,int n) { pi = (int**)calloc(m,sizeof(int*)); if(!pi) { NOTICE_POINT; } for(int i = 0;i < m;i++) { pi[i] = (int*)calloc(n,sizeof(int)); if(!pi[i]) { NOTICE_POINT; } for(int j = 0;j < n;j++) { cin>>pi[i][j]; } } } void AddByRealloc(int **&pi,int &m,int &n,int p,int q) { pi = (int**)realloc(pi,(m + p)*sizeof(int*)); if(!pi) { NOTICE_POINT; } for(int i = m;i < m + p;i++) { pi[i] = (int*)malloc(n*sizeof(int)); if(!pi) { NOTICE_POINT; } for(int j = 0;j < n;j++) { cin>>pi[i][j]; } } m += p; for(int i = 0;i < m;i++) { pi[i] = (int*)realloc(pi[i],(n + q)*sizeof(int)); if(!pi) { NOTICE_POINT; } for(int j = n;j < n + q;j++) { cin>>pi[i][j]; } } n += q; } void DestoryByFree(int **&pi,int m) { if(pi) { for(int i = 0;i < m;i++) { free(pi[i]); } free(pi); pi = NULL; } else { cout<<"pi指向空./n无需再销毁"<<endl; } } ///有BUG,邮箱dabbysunshine@qq.com联系~!___>(^_^)<