我有一个以前由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都需要免费!
以上就是c/c++开发分享结构数组的可用内存相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560167.html