结构数组的可用内存

我有一个以前由malloc分配的结构数组。 释放它:免费(临时)可以吗? temp是数组的名称。 或者我应该逐个元素释放?

是的。这个函数。我添加了structs.cur_node的声明是一个Node.I使用Node来创建链表。 并逐节点释放它。

struct Node { char template_id[6]; double tm_score; double rmsd; double sequence_id; int length; double translation_vector1; double translation_vector2; double translation_vector3; double rotation_matrix1; double rotation_matrix2; double rotation_matrix3; double rotation_matrix4; double rotation_matrix5; double rotation_matrix6; double rotation_matrix7; double rotation_matrix8; double rotation_matrix9; char target_sequence[2000]; char template_sequence[2000]; struct Node *next; }; struct Node *start_node, *cur_node; typedef struct { char *template_id; double tm_score; double rmsd; double sequence_id; int length; double translation_vector1; double translation_vector2; double translation_vector3; double rotation_matrix1; double rotation_matrix2; double rotation_matrix3; double rotation_matrix4; double rotation_matrix5; double rotation_matrix6; double rotation_matrix7; double rotation_matrix8; double rotation_matrix9; char *target_sequence; char *template_sequence; } Node1; void traverseAlignLList() { Node1 *temp; struct Node *old_node; int temp_counter=0; cur_node=start_node; temp=malloc(alignCounter*sizeof(Node1)); while(cur_node!=NULL) { temp[temp_counter].template_id=malloc(6*sizeof(char)); strcpy(temp[temp_counter].template_id,cur_node->template_id); temp[temp_counter].tm_score=cur_node->tm_score; temp[temp_counter].rmsd=cur_node->rmsd; temp[temp_counter].sequence_id=cur_node->sequence_id; temp[temp_counter].length=cur_node->length; temp[temp_counter].translation_vector1=cur_node->translation_vector1; temp[temp_counter].translation_vector2=cur_node->translation_vector2; temp[temp_counter].translation_vector3=cur_node->translation_vector3; temp[temp_counter].rotation_matrix1=cur_node->rotation_matrix1; temp[temp_counter].rotation_matrix2=cur_node->rotation_matrix2; temp[temp_counter].rotation_matrix3=cur_node->rotation_matrix3; temp[temp_counter].rotation_matrix4=cur_node->rotation_matrix4; temp[temp_counter].rotation_matrix5=cur_node->rotation_matrix5; temp[temp_counter].rotation_matrix6=cur_node->rotation_matrix6; temp[temp_counter].rotation_matrix7=cur_node->rotation_matrix7; temp[temp_counter].rotation_matrix8=cur_node->rotation_matrix8; temp[temp_counter].rotation_matrix9=cur_node->rotation_matrix9; temp[temp_counter].target_sequence=malloc(2000*sizeof(char)); strcpy(temp[temp_counter].target_sequence,cur_node->target_sequence); temp[temp_counter].template_sequence=malloc(2000*sizeof(char)); strcpy(temp[temp_counter].template_sequence,cur_node->template_sequence); temp_counter++; old_node=cur_node; cur_node=cur_node->next; free(old_node); } addAlignData(temp); free(temp); //free(cur_node); //free(start_node); start_node=NULL; } 

假设你有:

  int i, number_of_elements = 15; struct toto **array_toto; array_toto = malloc(sizeof(struct toto*)*number_of_elements); for( i = 0 ; i < number_of_elements; i++) array_toto[i] = malloc(sizeof(struct toto)); 

你必须免费:

  for( i = 0 ; i < number_of_elements; i++) free(array_toto[i]); free(array_toto); 

否则你会释放数组而不是结构。 但是,分配:

  array_toto = malloc(sizeof(struct toto)*number_of_elements); 

一个人免费就可以做到。

如果您使用一个malloc来分配数组,那么一个free就足够了。

经验法则,每个malloc都需要免费!