C语言—港式五张第二天:分文件全局变量声明,循环注意,free高阶指针

1.分文件全局变量声明

/*
    在B.c文件中调用A.c的全局变量的步骤如下:
    1.任何头文件都禁止定义全局变量;
    2.如果B.c想用来自A.c的全局变量的话,需要做以下步骤:
        ①.确保A.h中没有全局变量的定义;
        ②.去掉A.c中全局变量static的关键字(如果有的话);
        ③.在B.h中使用《extern》关键字来“声明”来自于A.c的全局变量(注意是声明不是定义,复制粘贴的时候别把值粘过来);
        ④.在B.c中包含B.h;
        ⑤.现在,B.c可以正常调用来自A.c的全局变量了。
    !!《《再次声明:禁止在任何头文件中定义全局变量》》!!
    !!《《再次声明:禁止在任何头文件中定义全局变量》》!!
    !!《《再次声明:禁止在任何头文件中定义全局变量》》!!
    !!《《再次声明:禁止在任何头文件中定义全局变量》》!!
    !!《《再次声明:禁止在任何头文件中定义全局变量》》!!
    !!《《再次声明:禁止在任何头文件中定义全局变量》》!!
    现在以此项目为例,进行展示:
    《注意:不要在任何头文件中定义全局变量;只在实现文件(.c)文件中定义全局变量》
    《注意:不要在任何头文件中定义全局变量;只在实现文件(.c)文件中定义全局变量》
    《注意:不要在任何头文件中定义全局变量;只在实现文件(.c)文件中定义全局变量》
    在这里,cardFunctions.c中定义了两个全局变量g_initialCardNum和g_initialCardColor.
    我们想要在playerFunctions.c中调用来自cardFunctions.c中的这两个全局变量。
    以下是步骤:
    1)确保cardFunctions.h中没有全局变量的定义;
    2)去除cardFunctions.c中全局变量static的关键字定义;
    3)在playerFunctions.h中《使用extern关键字》来“声明”来自cardFunctions.c的全局变量,注意不要赋值;
    4)在playerFunctions.c中包含playerFunctions.h头文件;
    5)在playerFunctions.c中就可以正常调用来自cardFunctions.c中全局变量了。
*/

2.循环

GAME_STATUS showPlayerCardStackValid(_IN_ PPlayer player)
{
	for (int j = 0; j < MAX_PERSONNAL_CARDS && *(((player->playerCardStack)[j])->num) != '0'; j++)
	{
		printf("Target Player's %ldth Card is %s%s\n", j + 1, ((player->playerCardStack)[j])->color, ((player->playerCardStack)[j])->num);
	}
	return STATUS_SUCCESS;
}

之前一个版本没有加

j < MAX_PERSONNAL_CARDS

导致当牌栈满了的时候由于无法识别

*(((player->playerCardStack)[j])->num)

导致内存错误。

3.free高阶指针(II)

GAME_STATUS getCombinedInfo(_OUT_ char**** combinedInfo)
{
	*combinedInfo = (char***)malloc(2 * sizeof(char**));
	if (*combinedInfo)
	{
		(*combinedInfo)[0] = (char**)malloc(COUNT_OF_NUM * sizeof(char*));
		(*combinedInfo)[1] = (char**)malloc(COUNT_OF_COLOR * sizeof(char*));
	}
	if (*combinedInfo && (*combinedInfo)[0])
	{
		for (int j = 0; j < COUNT_OF_NUM; j++)
		{
			(*combinedInfo)[0][j] = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
		}
	}
	if (*combinedInfo && (*combinedInfo)[1])
	{
		for (int j = 0; j < COUNT_OF_COLOR; j++)
		{
			(*combinedInfo)[1][j] = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
		}
	}
	char* Card_NUM_8 = (char*)"8\0";
	char* Card_NUM_9 = (char*)"9\0";
	char* Card_NUM_10 = (char*)"10";
	char* Card_NUM_J = (char*)"J\0";
	char* Card_NUM_Q = (char*)"Q\0";
	char* Card_NUM_K = (char*)"K\0";
	char* Card_NUM_A = (char*)"A\0";
	char* Card_COLOR_梅花 = (char*)"梅花";
	char* Card_COLOR_黑桃 = (char*)"黑桃";
	char* Card_COLOR_红桃 = (char*)"红桃";
	char* Card_COLOR_方片 = (char*)"方片";
	if (*combinedInfo && (*combinedInfo)[0] && (*combinedInfo)[0][0] && (*combinedInfo)[0][1] && (*combinedInfo)[0][2] && (*combinedInfo)[0][3] && (*combinedInfo)[0][4] && (*combinedInfo)[0][5] && (*combinedInfo)[0][6])
	{
		memcpy((*combinedInfo)[0][0], Card_NUM_8, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][1], Card_NUM_9, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][2], Card_NUM_10, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][3], Card_NUM_J, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][4], Card_NUM_Q, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][5], Card_NUM_K, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][6], Card_NUM_A, BYTES_FOR_SINGLE_NUM);
	}
	if (*combinedInfo && (*combinedInfo)[1] && (*combinedInfo)[1][0] && (*combinedInfo)[1][1] && (*combinedInfo)[1][2] && (*combinedInfo)[1][3])
	{
		memcpy((*combinedInfo)[1][0], Card_COLOR_梅花, BYTES_FOR_SINGLE_COLOR);
		memcpy((*combinedInfo)[1][1], Card_COLOR_黑桃, BYTES_FOR_SINGLE_COLOR);
		memcpy((*combinedInfo)[1][2], Card_COLOR_红桃, BYTES_FOR_SINGLE_COLOR);
		memcpy((*combinedInfo)[1][3], Card_COLOR_方片, BYTES_FOR_SINGLE_COLOR);
	}
	return STATUS_SUCCESS;
}
GAME_STATUS killCombinedInfoMemory(_OUT_ char**** combinedInfo)
{
	for (int j = 0; j < COUNT_OF_NUM; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[0][j])));
	}
	for (int j = 0; j < COUNT_OF_COLOR; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[1][j])));
	}
	for (int j = 0; j < 2; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[j])));
	}
	ExFreeMemoryToNULL((PVOID)(&(*combinedInfo)));
	return STATUS_SUCCESS;
}

GAME_STATUS initialPlayerInfo(_OUT_ PPlayer* player)
{
	(*player) = (PPlayer)malloc(sizeof(Player));
	if (*player)
	{
		(*player)->playerCardStack = (PCard*)malloc(MAX_PERSONNAL_CARDS * sizeof(PCard));
		if ((*player)->playerCardStack)
		{
			for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
			{
				((*player)->playerCardStack)[j] = (PCard)malloc(CARD_ATTRIBUTION_TYPES * sizeof(Card));
			}
		}
		if ((*player)->playerCardStack && ((*player)->playerCardStack)[0] && ((*player)->playerCardStack)[1] && ((*player)->playerCardStack)[2] && ((*player)->playerCardStack)[3] && ((*player)->playerCardStack)[4])
		{
			for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
			{
				(((*player)->playerCardStack)[j])->num = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
				(((*player)->playerCardStack)[j])->color = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
			}
		}
		if ((*player)->playerCardStack && ((*player)->playerCardStack)[0] && ((*player)->playerCardStack)[1] && ((*player)->playerCardStack)[2] && ((*player)->playerCardStack)[3] && ((*player)->playerCardStack)[4])
		{
			if ((((*player)->playerCardStack)[0])->num && (((*player)->playerCardStack)[1])->num && (((*player)->playerCardStack)[2])->num && (((*player)->playerCardStack)[3])->num && (((*player)->playerCardStack)[4])->num && (((*player)->playerCardStack)[0])->color && (((*player)->playerCardStack)[1])->color && (((*player)->playerCardStack)[2])->color && (((*player)->playerCardStack)[3])->color && (((*player)->playerCardStack)[4])->color)
			{
				for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
				{
					memcpy((((*player)->playerCardStack)[j])->num, g_initialCardNum, BYTES_FOR_SINGLE_NUM);
					memcpy((((*player)->playerCardStack)[j])->color, g_initialCardColor, BYTES_FOR_SINGLE_COLOR);
				}
			}
		}
		(*player)->chips = 50000;
		(*player)->round = 0;
	}
	return STATUS_SUCCESS;
}
GAME_STATUS killPlayerMemory(_OUT_ PPlayer* player)
{
	
	for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&((((*player)->playerCardStack)[j])->num)));
	}
	for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&((((*player)->playerCardStack)[j])->color)));
	}
	for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&(((*player)->playerCardStack)[j])));
	}
	ExFreeMemoryToNULL((PVOID)(&((*player)->playerCardStack)));
	ExFreeMemoryToNULL((PVOID)(&(*player)));
	return STATUS_SUCCESS;
}

这次是正确的。第一天有点问题,没free直接NULL了,虽然没报错但是不对。

目前没有任何问题。

目前新加的文件

//showHandPlayerDefs.h
#ifndef __showHandPlayerDefs__
#define __showHandPlayerDefs__
extern char* g_initialCardNum; // From cardFunctions.c extern g_initialCardNum
extern char* g_initialCardColor; // From cardFunctions.c extern g_initialCardColor
#include "showHandDefs.h"
GAME_STATUS initialPlayerInfo(_OUT_ PPlayer* player);
GAME_STATUS sentSingleCardToPlayer(_IN_ PCard card, _IN_ PPlayer player);
GAME_STATUS showPlayerCardStackValid(_IN_ PPlayer player);
GAME_STATUS resetPersonalChips(_IN_ PPlayer player, _IN_ ULONG newChip);
GAME_STATUS incGameRounds(_IN_ PPlayer player);
GAME_STATUS displaySinglePlayerAllInfo(_IN_ PPlayer player);
GAME_STATUS killPlayerMemory(_OUT_ PPlayer* player);
#endif
//playerFunctions.c
#include "showHandPlayerDefs.h"
#include "showHandPublicDefs.h"
GAME_STATUS initialPlayerInfo(_OUT_ PPlayer* player)
{
	(*player) = (PPlayer)malloc(sizeof(Player));
	if (*player)
	{
		(*player)->playerCardStack = (PCard*)malloc(MAX_PERSONNAL_CARDS * sizeof(PCard));
		if ((*player)->playerCardStack)
		{
			for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
			{
				((*player)->playerCardStack)[j] = (PCard)malloc(CARD_ATTRIBUTION_TYPES * sizeof(Card));
			}
		}
		if ((*player)->playerCardStack && ((*player)->playerCardStack)[0] && ((*player)->playerCardStack)[1] && ((*player)->playerCardStack)[2] && ((*player)->playerCardStack)[3] && ((*player)->playerCardStack)[4])
		{
			for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
			{
				(((*player)->playerCardStack)[j])->num = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
				(((*player)->playerCardStack)[j])->color = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
			}
		}
		if ((*player)->playerCardStack && ((*player)->playerCardStack)[0] && ((*player)->playerCardStack)[1] && ((*player)->playerCardStack)[2] && ((*player)->playerCardStack)[3] && ((*player)->playerCardStack)[4])
		{
			if ((((*player)->playerCardStack)[0])->num && (((*player)->playerCardStack)[1])->num && (((*player)->playerCardStack)[2])->num && (((*player)->playerCardStack)[3])->num && (((*player)->playerCardStack)[4])->num && (((*player)->playerCardStack)[0])->color && (((*player)->playerCardStack)[1])->color && (((*player)->playerCardStack)[2])->color && (((*player)->playerCardStack)[3])->color && (((*player)->playerCardStack)[4])->color)
			{
				for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
				{
					memcpy((((*player)->playerCardStack)[j])->num, g_initialCardNum, BYTES_FOR_SINGLE_NUM);
					memcpy((((*player)->playerCardStack)[j])->color, g_initialCardColor, BYTES_FOR_SINGLE_COLOR);
				}
			}
		}
		(*player)->chips = 50000;
		(*player)->round = 0;
	}
	return STATUS_SUCCESS;
}
GAME_STATUS sentSingleCardToPlayer(_IN_ PCard card, _IN_ PPlayer player)
{
	int top = 0;
	for (int j = 0; j<MAX_PERSONNAL_CARDS; j++)
	{
		if (*(((player->playerCardStack)[j])->num) == '0')
		{
			top = j;
			break;
		}
	}
	memcpy(((player->playerCardStack)[top])->num, card->num, BYTES_FOR_SINGLE_NUM);
	memcpy(((player->playerCardStack)[top])->color, card->color, BYTES_FOR_SINGLE_COLOR);
	return STATUS_SUCCESS;
}
GAME_STATUS showPlayerCardStackValid(_IN_ PPlayer player)
{
	for (int j = 0; j < MAX_PERSONNAL_CARDS && *(((player->playerCardStack)[j])->num) != '0'; j++)
	{
		printf("Target Player's %ldth Card is %s%s\n", j + 1, ((player->playerCardStack)[j])->color, ((player->playerCardStack)[j])->num);
	}
	return STATUS_SUCCESS;
}
GAME_STATUS resetPersonalChips(_IN_ PPlayer player, _IN_ ULONG newChip)
{
	player->chips = newChip;
	return STATUS_SUCCESS;
}
GAME_STATUS incGameRounds(_IN_ PPlayer player)
{
	player->round++;
	return STATUS_SUCCESS;
}
GAME_STATUS displaySinglePlayerAllInfo(_IN_ PPlayer player)
{
	showPlayerCardStackValid(player);
	printf("Chips now: %ld\n", player->chips);
	printf("Round now: %ld\n", player->round);
	return STATUS_SUCCESS;
}
GAME_STATUS killPlayerMemory(_OUT_ PPlayer* player)
{
	
	for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&((((*player)->playerCardStack)[j])->num)));
	}
	for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&((((*player)->playerCardStack)[j])->color)));
	}
	for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&(((*player)->playerCardStack)[j])));
	}
	ExFreeMemoryToNULL((PVOID)(&((*player)->playerCardStack)));
	ExFreeMemoryToNULL((PVOID)(&(*player)));
	return STATUS_SUCCESS;
}

修改过的cardFunctions.c

#include "showHandCardDefs.h"
#include "showHandPublicDefs.h"
char* g_initialCardNum = (char*)"0\0";
char* g_initialCardColor = (char*)"无花";
GAME_STATUS initialCard(_OUT_ PCard* card, _IN_ char* num, _IN_ char* color)
{
	*card = (PCard)malloc(sizeof(Card));
	if (*card)
	{
		(*card)->num = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
		if ((*card)->num)
		{
			memcpy((*card)->num, num, BYTES_FOR_SINGLE_NUM);
		}
		(*card)->color = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
		if ((*card)->color)
		{
			memcpy((*card)->color, color, BYTES_FOR_SINGLE_COLOR);
		}
	}
	return STATUS_SUCCESS;
}
GAME_STATUS initialSentCardsStack(_OUT_ PCard** stack)
{

	*stack = (PCard*)malloc(MAX_POSSIBLE_CARDS * sizeof(PCard));
	if (*stack)
	{
		for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
		{
			(*stack)[j] = (PCard)malloc(sizeof(Card));
		}
		for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
		{
			if(((*stack)[j]) != NULL)
			{
				((*stack)[j])->num = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
				((*stack)[j])->color = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
			}
		}
		for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
		{
			if (((*stack)[j]) != NULL)
			{
				if ((*stack)[j]->num && (*stack)[j]->color && g_initialCardNum && g_initialCardColor)
				{
					memcpy(((*stack)[j])->num, g_initialCardNum, BYTES_FOR_SINGLE_NUM);
					memcpy(((*stack)[j])->color, g_initialCardColor, BYTES_FOR_SINGLE_COLOR);
				}
			}
		}
	}
	return STATUS_SUCCESS;
}
GAME_STATUS getCombinedInfo(_OUT_ char**** combinedInfo)
{
	*combinedInfo = (char***)malloc(2 * sizeof(char**));
	if (*combinedInfo)
	{
		(*combinedInfo)[0] = (char**)malloc(COUNT_OF_NUM * sizeof(char*));
		(*combinedInfo)[1] = (char**)malloc(COUNT_OF_COLOR * sizeof(char*));
	}
	if (*combinedInfo && (*combinedInfo)[0])
	{
		for (int j = 0; j < COUNT_OF_NUM; j++)
		{
			(*combinedInfo)[0][j] = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
		}
	}
	if (*combinedInfo && (*combinedInfo)[1])
	{
		for (int j = 0; j < COUNT_OF_COLOR; j++)
		{
			(*combinedInfo)[1][j] = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
		}
	}
	char* Card_NUM_8 = (char*)"8\0";
	char* Card_NUM_9 = (char*)"9\0";
	char* Card_NUM_10 = (char*)"10";
	char* Card_NUM_J = (char*)"J\0";
	char* Card_NUM_Q = (char*)"Q\0";
	char* Card_NUM_K = (char*)"K\0";
	char* Card_NUM_A = (char*)"A\0";
	char* Card_COLOR_梅花 = (char*)"梅花";
	char* Card_COLOR_黑桃 = (char*)"黑桃";
	char* Card_COLOR_红桃 = (char*)"红桃";
	char* Card_COLOR_方片 = (char*)"方片";
	if (*combinedInfo && (*combinedInfo)[0] && (*combinedInfo)[0][0] && (*combinedInfo)[0][1] && (*combinedInfo)[0][2] && (*combinedInfo)[0][3] && (*combinedInfo)[0][4] && (*combinedInfo)[0][5] && (*combinedInfo)[0][6])
	{
		memcpy((*combinedInfo)[0][0], Card_NUM_8, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][1], Card_NUM_9, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][2], Card_NUM_10, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][3], Card_NUM_J, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][4], Card_NUM_Q, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][5], Card_NUM_K, BYTES_FOR_SINGLE_NUM);
		memcpy((*combinedInfo)[0][6], Card_NUM_A, BYTES_FOR_SINGLE_NUM);
	}
	if (*combinedInfo && (*combinedInfo)[1] && (*combinedInfo)[1][0] && (*combinedInfo)[1][1] && (*combinedInfo)[1][2] && (*combinedInfo)[1][3])
	{
		memcpy((*combinedInfo)[1][0], Card_COLOR_梅花, BYTES_FOR_SINGLE_COLOR);
		memcpy((*combinedInfo)[1][1], Card_COLOR_黑桃, BYTES_FOR_SINGLE_COLOR);
		memcpy((*combinedInfo)[1][2], Card_COLOR_红桃, BYTES_FOR_SINGLE_COLOR);
		memcpy((*combinedInfo)[1][3], Card_COLOR_方片, BYTES_FOR_SINGLE_COLOR);
	}
	return STATUS_SUCCESS;
}
GAME_STATUS verifyCardAlreadySent(_IN_ PCard card, _IN_ PCard* stack, _OUT_ INT* flag, _OUT_ INT* loc)
{
	*flag = 1;
	*loc = 0;
	for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
	{
		if (strncmp(stack[j]->num, card->num, BYTES_FOR_SINGLE_NUM) == 0)
		{
			if (strncmp(stack[j]->color, card->color, BYTES_FOR_SINGLE_COLOR) == 0)
			{
				*flag = 0;
				*loc = j;
			}
		}
	}
	return STATUS_SUCCESS;
}
GAME_STATUS pushCardIntoStack(_IN_ PCard card, _IN_OUT_ PCard* stack)
{
	int top = 0;
	for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
	{
		if(*(stack[j]->num) == '0')
		{
			top = j;
			break;
		}
	}
	memcpy(stack[top]->num, card->num, BYTES_FOR_SINGLE_NUM);
	memcpy(stack[top]->color, card->color, BYTES_FOR_SINGLE_COLOR);
	return STATUS_SUCCESS;
}
GAME_STATUS displaySentStackValid(_IN_ PCard* stack)
{
	for (int j = 0; j < MAX_POSSIBLE_CARDS && *(stack[j]->num) != '0'; j++)
	{
		printf("%ld -> %s%s\n", j + 1, stack[j]->color, stack[j]->num);
	}
	return STATUS_SUCCESS;
}
GAME_STATUS displayAllStack(_IN_ PCard* stack)
{
	for (int j = 0; j<MAX_POSSIBLE_CARDS; j++)
	{
		printf("%ld -> %s%s\n", j + 1, stack[j]->color, stack[j]->num);
	}
	return STATUS_SUCCESS;
}
GAME_STATUS clearSentCardsStack(_IN_OUT_ PCard* stack)
{
	for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
	{
		memcpy(stack[j]->num, g_initialCardNum, BYTES_FOR_SINGLE_NUM);
		memcpy(stack[j]->color, g_initialCardColor, BYTES_FOR_SINGLE_COLOR);
	}
	return STATUS_SUCCESS;
}
GAME_STATUS killCardMemory(_OUT_ PCard* card)
{
	ExFreeMemoryToNULL((PVOID)(&((*card)->num)));
	ExFreeMemoryToNULL((PVOID)(&((*card)->color)));
	*card = NULL;
	return STATUS_SUCCESS;
}
GAME_STATUS killStackMemory(_OUT_ PCard** stack)
{
	for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&(((*stack)[j])->num)));
	}
	for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&(((*stack)[j])->color)));
	}
	for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&((*stack)[j])));
	}
	ExFreeMemoryToNULL((PVOID)(&(*stack)));
	return STATUS_SUCCESS;
}
GAME_STATUS killCombinedInfoMemory(_OUT_ char**** combinedInfo)
{
	for (int j = 0; j < COUNT_OF_NUM; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[0][j])));
	}
	for (int j = 0; j < COUNT_OF_COLOR; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[1][j])));
	}
	for (int j = 0; j < 2; j++)
	{
		ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[j])));
	}
	ExFreeMemoryToNULL((PVOID)(&(*combinedInfo)));
	return STATUS_SUCCESS;
}

今天到此为止!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值