fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #if 0
  6.  
  7. int func(int a1_row, int a1_col, int a2_row, int a2_col, int a3_row, int a3_col, double ***a1_dst, int ***a2_dst, float ***a3_dst)
  8. {
  9. double **a1;
  10. int **a2;
  11. float ** a3;
  12. int i;
  13.  
  14. a1 = (double **)malloc(sizeof(double *) * a1_row);
  15. for(i = 0; i < a1_row; ++i)
  16. a1[i] = (double *)malloc(sizeof(double) * a1_col);
  17.  
  18. a2 = (int **)malloc(sizeof(int *) * a2_row);
  19. for(i = 0; i < a2_row; ++i)
  20. a2[i] = (int *)malloc(sizeof(int) * a2_col);
  21.  
  22. a3 = (float **)malloc(sizeof(float *) * a3_row);
  23. for(i = 0; i < a3_row; ++i)
  24. a3[i] = (float *)malloc(sizeof(float) * a3_col);
  25.  
  26. *a1_dst = a1;
  27. *a2_dst = a2;
  28. *a3_dst = a3;
  29. return 1;
  30. }
  31.  
  32. #else
  33.  
  34. int func(int a1_row, int a1_col, int a2_row, int a2_col, int a3_row, int a3_col, double ***a1_dst, int ***a2_dst, float ***a3_dst)
  35. {
  36. double **a1 = NULL;
  37. int **a2 = NULL;
  38. float **a3 = NULL;
  39. int i;
  40. int suceeded = 1;
  41.  
  42. a1 = (double **)malloc(sizeof(double *) * a1_row);
  43. suceeded = (int)a1;
  44. if(suceeded)
  45. {
  46. memset(a1, 0, sizeof(double *) * a1_row);
  47. }
  48. for(i = 0; i < a1_row && suceeded; ++i)
  49. {
  50. a1[i] = (double *)malloc(sizeof(double) * a1_col);
  51. suceeded = (int)a1[i];
  52. }
  53.  
  54. if(suceeded)
  55. {
  56. a2 = (int **)malloc(sizeof(int *) * a2_row);
  57. suceeded = (int)a2;
  58. }
  59. if(suceeded)
  60. {
  61. memset(a2, 0, sizeof(int *) * a2_row);
  62. }
  63. for(i = 0; i < a2_row && suceeded; ++i)
  64. {
  65. a2[i] = (int *)malloc(sizeof(int) * a2_col);
  66. suceeded = (int)a2[i];
  67. }
  68.  
  69. if(suceeded)
  70. {
  71. a3 = (float **)malloc(sizeof(float *) * a3_row);
  72. suceeded = (int)a3;
  73. }
  74. if(suceeded)
  75. {
  76. memset(a3, 0, sizeof(float *) * a3_row);
  77. }
  78. for(i = 0; i < a3_row && suceeded; ++i)
  79. {
  80. a3[i] = (float *)malloc(sizeof(float) * a3_col);
  81. suceeded = (int)a3[i];
  82. }
  83.  
  84. if(suceeded)
  85. {
  86. *a1_dst = a1;
  87. *a2_dst = a2;
  88. *a3_dst = a3;
  89. }
  90. else
  91. {
  92. if(a3)
  93. {
  94. for(i = a3_row - 1; i >= 0; --i)
  95. {
  96. if(a3[i])
  97. free(a3[i]);
  98. }
  99. free(a3);
  100. }
  101. if(a2)
  102. {
  103. for(i = a2_row - 1; i >= 0; --i)
  104. {
  105. if(a2[i])
  106. free(a2[i]);
  107. }
  108. free(a2);
  109. }
  110. if(a1)
  111. {
  112. for(i = a1_row - 1; i >= 0; --i)
  113. {
  114. if(a1[i])
  115. free(a1[i]);
  116. }
  117. free(a1);
  118. }
  119. }
  120. return suceeded? 1: 0;
  121. }
  122.  
  123. #endif
  124.  
  125. #define A1_ROW (1000)
  126. #define A1_COL (2000)
  127. #define A2_ROW (3000)
  128. #define A2_COL (4000)
  129. #define A3_ROW (5000)
  130. #define A3_COL (6000)
  131.  
  132. int main(void)
  133. {
  134. double **a1 = NULL;
  135. int **a2 = NULL;
  136. float **a3 = NULL;
  137. int result = func(A1_ROW, A1_COL, A2_ROW, A2_COL, A3_ROW, A3_COL, &a1, &a2, &a3);
  138.  
  139. printf("result = %d\n", result);
  140.  
  141. if(result)
  142. {
  143. int i;
  144. for(i = A3_ROW - 1; i >= 0; --i)
  145. {
  146.  
  147. free(a3[i]);
  148. }
  149. free(a3);
  150.  
  151. for(i = A2_ROW - 1; i >= 0; --i)
  152. {
  153. free(a2[i]);
  154. }
  155. free(a2);
  156.  
  157. for(i = A1_ROW - 1; i >= 0; --i)
  158. {
  159. free(a1[i]);
  160. }
  161. free(a1);
  162. }
  163.  
  164. return 0;
  165. }
Success #stdin #stdout 0.05s 1808KB
stdin
Standard input is empty
stdout
result = 1