所以我遇到了一个奇怪的问题而且似乎无法解决它。我有一个名为TEAM的ADT:
typedef struct Team {
char *name;
int points;
int matches_won;
int goal_difference;
int goals_for;
}TEAM;
我创建了一个函数来初始化具有给定名称的TEAM *类型的变量:
TEAM *createTEAM (char *name){
int error_code;
if (name != NULL){
if(strcmp(name, "") != 0){
TEAM *new_team = (TEAM*)malloc(sizeof(TEAM));
new_team->name = (char*)malloc(sizeof(char)*strlen(name));
strcpy(new_team->name, name);
new_team->points = 0;
new_team->matches_won = 0;
new_team->goal_difference = 0;
new_team->goals_for = 0;
return new_team;
}else{
error_code = EMPTY_STRING_CODE;
}
} else {
error_code = NULL_STRING_CODE;
}
printf("Erro ao criar time.\n");
printError(error_code);
return NULL;
}
我还创建了一个正确删除其中一个TEAM *变量的函数:
void deleteTEAM (TEAM *team_to_remove){
free(team_to_remove->name);
team_to_remove->name = NULL;
free(team_to_remove);
team_to_remove = NULL;
}
但是当我创建的一个或多个测试函数(例如下面的代码)运行时,程序有时会崩溃,有时候不会崩溃。我注意到,更改我使用的名称会影响它是否崩溃,即使它们不会影响测试结果。
int create_team_01(){
int test_result;
TEAM *Teste = createTEAM("Cruzeiro");
if (strcmp(Teste->name, "Cruzeiro") == 0){
test_result = TRUE;
}else test_result = FALSE;
_assert(test_result); //just a macro function that will check the argument and return 1 if it's false
deleteTEAM(Teste);
return 0;
}
我没有看到内存分配或释放的任何问题。尽管如此,调试器仍然抱怨deleteTEAM函数的第一个free()(无法找到边界)。有任何想法吗?非常感谢您提供任何帮助。
P.S。:我甚至试过检查mallocs'结果,但它似乎也不是问题,所以我为了简单起见删除了它。