免费的2D动态阵列内部的链接列表中
我的问题是释放动态2D数组,
typedef struct name{
char **given_name;
char **surname;
} Name;
typedef struct list {
float id;
struct name author_name;
struct list *p_prev, *p_next;
} List;
void load_data(List** head){
List* tmp_new = Null;
while(1){
tmp_new->author_name.given_name= (char**) malloc(10 * sizeof(char*));
tmp_new->author_name.surname = (char**) malloc(10 * sizeof(char*));
while(condition){ //this condition is always whithin 1-10
tmp_new->author_name.given_name[i]=(char*) malloc(200 * sizeof(char*));
tmp_new->author_name.surname[i] =(char*) malloc(200 * sizeof(char*));
}
given_name= "John"
surname= "Blake"
sscanf(name, "%s %s", tmp_new->author_name.given_name[i], tmp_new->author_name.surname[i]);
tmp_new->p_prev = *head;
tmp_new->p_next = NULL;
(*head)->p_next = p_new;
(*head) = p_new;
// realloc again for the next enrty
given_name= "Tom"
surname= "Jerry"
sscanf(name, "%s %s", tmp_new->author_name.given_name[i],tmp_new->author_name.surname[i]);
}
}
//once done within this function free it
if(*head != NULL) {
while (1){
if ((*head)->p_next!= NULL) {
tmp = (*head);
(*head) = (*head)->p_next;
for(int i=0; i<200; i++){
free(tmp->author_name.given_name[i]);
free(tmp->author_name.surname[i]);
}
free(tmp->author_name.given_name);
free(tmp->author_name.surname);
free(tmp);
}
else {
break;
}
}
}
}
int main()
List* head = NULL;
List* tmp;
load_data(&head);
if (head != NULL) {
while (1){
if (head->p_next!= NULL) {
tmp = head;
head = head->p_next;
for(int i=0; i<200;i++){
free(tmp->author_name.given_name[i])
free(tmp->author_name.surname[i])
}
free(tmp->author_name.given_name);
free(tmp->author_name.surname);
free(tmp);
}
else {
printf("free was sucesfull.\n");
break;
}
}
}
return 0;
每当我尝试释放////(TMP--&author_name.given_name [i]时,它就在链接列表中。 或者 /// tmp-&gt; fure_name.surname [i])我得到了细分故障,我将其放入printf中以查看它会破裂的位置,甚至在0索引上破裂,这总是满足的,所以问题不在在1-10之内的条件不知道会发生什么,也许我在指针算术上做错了什么?并且需要以不同的方式释放:/
my problem is with freeing a dynamic 2D array, that's inside linked list
typedef struct name{
char **given_name;
char **surname;
} Name;
typedef struct list {
float id;
struct name author_name;
struct list *p_prev, *p_next;
} List;
void load_data(List** head){
List* tmp_new = Null;
while(1){
tmp_new->author_name.given_name= (char**) malloc(10 * sizeof(char*));
tmp_new->author_name.surname = (char**) malloc(10 * sizeof(char*));
while(condition){ //this condition is always whithin 1-10
tmp_new->author_name.given_name[i]=(char*) malloc(200 * sizeof(char*));
tmp_new->author_name.surname[i] =(char*) malloc(200 * sizeof(char*));
}
given_name= "John"
surname= "Blake"
sscanf(name, "%s %s", tmp_new->author_name.given_name[i], tmp_new->author_name.surname[i]);
tmp_new->p_prev = *head;
tmp_new->p_next = NULL;
(*head)->p_next = p_new;
(*head) = p_new;
// realloc again for the next enrty
given_name= "Tom"
surname= "Jerry"
sscanf(name, "%s %s", tmp_new->author_name.given_name[i],tmp_new->author_name.surname[i]);
}
}
//once done within this function free it
if(*head != NULL) {
while (1){
if ((*head)->p_next!= NULL) {
tmp = (*head);
(*head) = (*head)->p_next;
for(int i=0; i<200; i++){
free(tmp->author_name.given_name[i]);
free(tmp->author_name.surname[i]);
}
free(tmp->author_name.given_name);
free(tmp->author_name.surname);
free(tmp);
}
else {
break;
}
}
}
}
int main()
List* head = NULL;
List* tmp;
load_data(&head);
if (head != NULL) {
while (1){
if (head->p_next!= NULL) {
tmp = head;
head = head->p_next;
for(int i=0; i<200;i++){
free(tmp->author_name.given_name[i])
free(tmp->author_name.surname[i])
}
free(tmp->author_name.given_name);
free(tmp->author_name.surname);
free(tmp);
}
else {
printf("free was sucesfull.\n");
break;
}
}
}
return 0;
whenever i try to free the ///(tmp->author_name.given_name[i])
or
/// tmp->author_name.surname[i]) i get segmentation faults, i put inside printf to see where it would break and it even breaks on 0 index, which is always full, so the problem isn't that while condition that's within 1-10, have no idea what might be happening, maybe I'm doing something wrong with pointer arithmetic? and needs to be freed differently :/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论