所以我有一個代碼,當我運行它時,它會掛起,當我輸入一個大於3的大小。當它正好3它運行平穩。我將問題縮小到malloc和free,我不知道問題是什麼。我是新來的,所以任何幫助表示讚賞。C編程 - 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(size<3 || size>9);
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]);
}
的'免費()'應該在的malloc')完全相反的順序('順序。 – 2012-04-09 02:38:43
當你使用'free(board [i]);'你實際上失去了指向你分配的內存的指針,所以你不能使用'free(board [i] [j]);'。免費使用(board [i]);在第二次之後。 – 2012-04-09 02:41:09
好的,謝謝你們。 – user1311135 2012-04-09 02:43:57