繁体   English   中英

结构数组的可用内存

[英]Free memory for array of structs

我有一个以前由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都需要免费!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM