12. int point_size = sizeof(T*);
13. //先申请内存,其中sizeof(T*) * row表示存放row个行指针
14. T **arr = (T **) malloc(point_size * row + size * row * col);
15. if (arr != NULL)
16. {
17. T *head = (T*)((int)arr + point_size * row);
18. for (int i = 0; i < row; ++i)
19. {
20. arr[i] = (T*)((int)head + i * col * size);
21. for (int j = 0; j < col; ++j)
22. new (&arr[i][j]) T;
23. }
24. }
25. return (T**)arr;
26. }
27. //释放二维数组
28. template
29. void delete_Array2D(T **arr, int row, int col)
30. {
31. for (int i = 0; i < row; ++i)
32. for (int j = 0; j < col; ++j)
33. arr[i][j].~T();
34. if (arr != NULL)
35. free((void**)arr);
36. }
37. int main()
38. {
39. printf(" C++语言中动态的申请二维数组 new delete\n");
40. printf(" -- by MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");
41.
43. int nRow, nCol;
44. scanf("%d %d", &nRow, &nCol);
45.
46. //动态申请连续的二维数组
47. string **p = new_Array2D
48.
49. //为二维数组赋值
50. int i, j;
51. for (i = 0; i < nRow; i++)
52. for (j = 0; j < nCol; j++)
53. {
54. char szTemp[30];
55. sprintf(szTemp, "(第%d行,第%d列)", i, j);
56. p[i][j] = szTemp;
57. }
58.
59. //输出二维数组
60. for (i = 0; i < nRow; i++)
61. {
62. for (j = 0; j < nCol; j++)
63. printf("%s ", p[i][j].c_str());
64. putchar('\n');
65. }
66.
67. delete_Array2D
68. return 0;
69. }
运行结果如下:

作者:MoreWindows