C Программирование – Malloc / Free

Таким образом, у меня есть код, и когда я его запускаю, он зависает, когда я ввожу размер больше 3. Когда он ровно 3, он работает плавно. Я сузил проблему до malloc и бесплатно, и я не знаю, в чем проблема. Я новичок в этом, поэтому любая помощь приветствуется.

do //repeatedly ask the user to put a number between 3-9 { printf("Enter the size of the game board between 3-9: "); scanf("%d", &size); }while(size9); if((board = (char***)malloc(sizeof(char**)*size))==NULL) printf("Memory Allocation failed\n"); for(i=0; i<size; i++) { if((board[i] = (char**)malloc(sizeof(char*)*size))==NULL) printf("Memory Allocation failed\n"); for(j=0; j<size; j++) { if((board[i][j] = (char *)malloc(sizeof(char)*4))==NULL) printf("Memory Allocation failed\n"); strcpy(board[i][j], "Go"); } } /*************Some random code ***********/ free(board); for(i=0;i<size;i++) { free(board[i]); for(j=0;j<size;j++) free(board[i][j]); } 

Проблема в том, что вы получаете доступ к board после того, как вы free его. Вы должны освободить память в обратном порядке, чтобы вы ее malloc .

Альтернативный подход заключается в том, что вы можете выделить всю необходимую вам память в целом, например

  char ***board = NULL; char **rows = NULL; char *data = NULL; if((board = (char***)malloc(sizeof(char**)*size))==NULL) printf("Memory Allocation failed\n"); if((rows = (char**)malloc(sizeof(char*)*size*size))==NULL) printf("Memory Allocation failed\n"); if((data = (char *)malloc(sizeof(char)*size*size*4))==NULL) printf("Memory Allocation failed\n"); for (i = 0; i < size; i++) { int board_offset = i * size; board[i] = rows[board_offset]; for (j = 0; j < size; j++) { int row_offset = board_offset + j; rows[row_offset] = data[row_offset * 4]; stcpy(data[row_offset * 4], "GO"); } } free(board); free(rows); free(data);