RicardasSim

learning c arrays

Mar 17th, 2019
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <stdint.h>
  5.  
  6.  
  7. uint32_t** arrD = NULL;
  8. uint32_t numE = 0;
  9.  
  10. void cleanup()
  11. {
  12.  
  13.     if(numE)
  14.     {
  15.         for( uint32_t i = 0; i < numE; ++i)
  16.         {
  17.             free(arrD[i]);
  18.             printf("INFO: free arrD[%d]\n",i);
  19.         }
  20.     }
  21.    
  22.   if(arrD) free(arrD);;
  23.    
  24. }
  25.  
  26. bool init()
  27. {
  28.    
  29.     uint32_t** arrTmp;
  30.    
  31.    
  32.     arrD = realloc(arrD, sizeof(uint32_t*)*(numE+1));
  33.    
  34.     if(!arrD) return false;
  35.    
  36.     arrD[numE] = malloc(sizeof(uint32_t)*10);
  37.    
  38.     if(!arrD[numE]) return false;
  39.    
  40.     numE++;
  41.    
  42.    
  43.    
  44.    
  45.    
  46.     arrTmp = realloc(arrD, sizeof(uint32_t*)*(numE+1));
  47.    
  48.     if(!arrTmp) return false;
  49.    
  50.     arrD = arrTmp;
  51.  
  52.     arrD[numE] = malloc(sizeof(uint32_t)*20);
  53.    
  54.     if(!arrD[numE]) return false;
  55.    
  56.     numE++;
  57.    
  58.    
  59.    
  60.    
  61.    
  62.     arrTmp = realloc(arrD, sizeof(uint32_t*)*(numE+1));
  63.    
  64.     if(!arrTmp) return false;
  65.    
  66.     arrD = arrTmp;
  67.    
  68.     arrD[numE] = malloc(sizeof(uint32_t)*30);
  69.    
  70.     if(!arrD[numE]) return false;
  71.    
  72.     numE++;
  73.    
  74.    
  75.    
  76.    
  77.     return true;
  78. }
  79.  
  80. int main (int argc, char **argv){
  81.  
  82.     uint32_t pArr1[]={0,1,2};
  83.     uint32_t pArr2[]={3,4,5,6};
  84.     uint32_t pArr3[]={7,8,9,10,11};
  85.  
  86.     printf("sizeof pArr1: %zu\n", sizeof(pArr1));
  87.     printf("sizeof pArr1[0]: %zu\n", sizeof(pArr1[0]));
  88.     printf("sizeof *pArr1: %zu\n", sizeof(*pArr1));
  89.     printf("sizeof &pArr1: %zu\n", sizeof(&pArr1));
  90.     printf("num 1: %zu\n", sizeof(pArr1)/sizeof(pArr1[0]));
  91.     printf("num 2: %zu\n", sizeof(pArr2)/sizeof(pArr2[0]));
  92.     printf("num 3: %zu\n", sizeof(pArr3)/sizeof(pArr3[0]));
  93.    
  94.    
  95.     if(!init())
  96.     {
  97.         cleanup();
  98.         return 1;
  99.     }
  100.    
  101.     printf("INFO: Ready!\n");
  102.  
  103.     printf("%zubit machine\n",sizeof(void*)*8);
  104.     printf("sizeof arrD: %zu\n", sizeof(arrD));
  105.     printf("sizeof *arrD: %zu\n", sizeof(*arrD));
  106.     printf("sizeof arrD[0]: %zu\n", sizeof(arrD[0]));
  107.     printf("sizeof *arrD[0]: %zu\n", sizeof(*arrD[0]));
  108.     printf("sizeof arrD[0][0]: %zu\n", sizeof(arrD[0][0]));
  109.    
  110.     for(uint32_t i = 0; i<10; ++i)
  111.     {
  112.         arrD[0][i] = i;
  113.     }
  114.  
  115.     for(uint32_t i = 0; i<20; ++i)
  116.     {
  117.         arrD[1][i] = i;
  118.     }
  119.    
  120.     for(uint32_t i = 0; i<30; ++i)
  121.     {
  122.         arrD[2][i] = i;
  123.     }
  124.    
  125.    
  126.     for(uint32_t i = 0; i<10; ++i) printf("%d ",arrD[0][i]);
  127.     printf("\n");
  128.  
  129.     for(uint32_t i = 0; i<20; ++i) printf("%d ",arrD[1][i]);
  130.     printf("\n");
  131.    
  132.     for(uint32_t i = 0; i<30; ++i) printf("%d ",arrD[2][i]);
  133.     printf("\n");
  134.    
  135.     cleanup();
  136.    
  137. return 0;
  138. }
  139.  
  140. /*
  141.  
  142. sizeof pArr1: 12
  143. sizeof pArr1[0]: 4
  144. sizeof *pArr1: 4
  145. sizeof &pArr1: 8
  146. num 1: 3
  147. num 2: 4
  148. num 3: 5
  149. INFO: Ready!
  150. 64bit machine
  151. sizeof arrD: 8
  152. sizeof *arrD: 8
  153. sizeof arrD[0]: 8
  154. sizeof *arrD[0]: 4
  155. sizeof arrD[0][0]: 4
  156. 0 1 2 3 4 5 6 7 8 9
  157. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
  158. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
  159. INFO: free arrD[0]
  160. INFO: free arrD[1]
  161. INFO: free arrD[2]
  162.  
  163. */
Add Comment
Please, Sign In to add comment