Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. void** createTable(int numRows,int numCols,int elemSize);
  6. int getRowSize(void**array);
  7. int getColSize(void**array);
  8. void freeTable(void**array);
  9. void setTable(void**arr);
  10. void printTable(void**arr);
  11.  
  12.  
  13. typedef struct TableElements{
  14.  
  15. int numRows;
  16. int numCols;
  17.  
  18. }Table;
  19.  
  20. int main(void){
  21.  
  22. void** Array = createTable(3, 6, sizeof(float));
  23.  
  24. printf("The hidden elements are %d and %d",getRowSize(Array),getColSize(Array));
  25. setTable(Array);
  26. printTable(Array);
  27. printf("\nWe made it to before the freetable function.");
  28. freeTable(Array);
  29. }
  30.  
  31. void** createTable(int numRows, int numCols, int elemSize){
  32. void** Array = malloc((sizeof(void*)*numRows) + (sizeof(Table))); //Create the array with the proper size, and the size of an extra hidden table.
  33.  
  34. Array = (void**)((Table*)Array + 1);
  35.  
  36. if(Array != NULL){
  37. for(int i = 0;i<numRows;i++){
  38. Array[i] = malloc(numCols*elemSize);
  39. if(Array[i] == NULL){
  40. int temp = i;
  41. printf("\nYo the array managed to null\n");
  42. for(int j = 0;j<temp;j++){
  43. free(Array[j]);
  44. }
  45. free(Array);
  46. }
  47.  
  48. }
  49.  
  50. ((Table*)Array-1)->numRows = numRows;
  51. ((Table*)Array-1)->numCols = numCols;
  52.  
  53.  
  54. return Array;
  55. }
  56. return NULL;
  57. }
  58.  
  59. int getRowSize(void**Array){
  60. return ((Table*)Array-1)->numRows;
  61. }
  62. int getColSize(void**Array){
  63. return ((Table*)Array-1)->numCols;
  64. }
  65.  
  66. void freeTable(void**Array){
  67. for(int j = 0;j<getRowSize(Array);j++){
  68. printf("pre %d\n", j);
  69. free(Array[j]);
  70. printf("post %d\n", j);
  71. }
  72. printf("Finished the FOR loop\n");
  73. //Array = ((void*)((Table*)Array - 1));
  74. printf("Moved array over successfully\n");
  75. free((Table*)Array - 1);
  76. printf("Freed the Array Successfully\n");
  77. }
  78. void setTable(void **arr)
  79. {
  80. int i, j;
  81. for(i = 0; i<getRowSize(arr); i++)
  82. {
  83. for(j = 0; j<getColSize(arr); j++)
  84. {
  85. *((int*)arr+j) = j;
  86. }
  87. }
  88. }
  89.  
  90. void printTable(void **arr)
  91. {
  92. int i, j;
  93. for(i = 0; i<getRowSize(arr); i++)
  94. {
  95. printf("\nRow #%-2d - ", i);
  96. for(j = 0; j<getColSize(arr); j++)
  97. {
  98. printf("%d ", *((int*)arr+j));
  99. }
  100. }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement