#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include <math.h>
typedef struct label{
int id;
double p,*t,q,c;
int V[45];
struct label *next;
struct label *prev;
struct path *tail;
struct path *head;
}label;
typedef struct path{
int i;
struct path *Pperv;
struct path *Pnext;
}path;
void main(){
int i,j,k;
struct label *Current,*FCurrent,*Current2,*Head,*Tail,*FHead,*FTail;
struct path *cur,*test3,*test2,*test1,*path_head,*path_tail;
Head=(struct label*)malloc(1*sizeof(struct label));
Tail=(struct label*)malloc(1*sizeof(struct label));
Head->next=Tail;
Tail->prev=Head;
FHead=(struct label*)malloc(1*sizeof(struct label));
FTail=(struct label*)malloc(1*sizeof(struct label));
FHead->next=FTail;
FTail->prev=FHead;
for (i=0;i<250000;i++)
{
//printf("%d",i);
Current=(struct label*)malloc(1*sizeof(struct label));
Current->t=(double*)malloc(15*sizeof(double));
Current->head=(struct path*)malloc(1*sizeof(struct path));
Current->tail=(struct path*)malloc(1*sizeof(struct path));
Current->head->Pnext=Current->tail;
Current->tail->Pperv=Current->head;
for (j=0;j<15;j++)
{
test1=(struct path*)malloc(1*sizeof(struct path));
test1->Pperv=Current->head;
test1->Pnext=Current->head->Pnext;
Current->head->Pnext->Pperv=test1;
Current->head->Pnext=test1;
test1->i=1;
Current->t[j]=23123.43;
}
if (i % 4!=0)
{
Current->next=Tail;
Current->prev=Tail->prev;
Tail->prev->next=Current;
Tail->prev=Current;
Current->p=54545.323241321;
}
else
{
Current->next=FTail;
Current->prev=FTail->prev;
FTail->prev->next=Current;
FTail->prev=Current;
}
}
Current=Head->next;
while(Current->next!=Tail)
{
Head->next->next->prev=Head;
Head->next=Head->next->next;
test1=Current->head->Pnext;
while(test1!=Current->tail)
{
test2=test1;
test1=test1->Pnext;
free(test2);
}
free(Current->t);
free(Current->head);
free(Current->tail);
free(Current);
Current=Head->next;
}
Current=FHead->next;
while(Current->next!=FTail)
{
FHead->next->next->prev=FHead;
FHead->next=FHead->next->next;
k=0;
test1=Current->head->Pnext;
while(test1!=Current->tail)
{
test2=test1;
test1=test1->Pnext;
free(test2);
k++;
}
free(Current->t);
free(Current->head);
free(Current->tail);
free(Current);
Current=FHead->next;
}
}
我試驗了以下問題。這不是我真正的問題,它只是我創建的一個例子,爲的是讓問題更容易被查看。正如你在這個例子中看到的那樣,我有兩個結構,一個在另一個裏面,例子的作用是創建類型爲label的新結構,並用指針FHead和FTail將它們放入列表中的3次,在指針Head和Tail的列表中4次。問題是,當我嘗試釋放結構時,它不會發生,語法是100%正確的,因爲當我將所有結構保存在兩個列表中的一箇中時,費用函數工作得很好。這導致了我使用指針時發生錯誤的結果,不幸的是,我是C中的新成員,所以我不太清楚整個指針是如何去做的。所以如果有人能夠解釋使用指針時出現了什麼問題,我應該非常感謝,並且我應該如何在ordr中創建特定的列表以使frre函數正常工作。 預先感謝您...嘗試釋放C中的結構時出現問題
你的問題確實是未stackoverflowish。嘗試發佈簡單,簡潔,儘可能直接的代碼,並進行適當的評論。 另外,請問同樣客觀的問題,並只發布相關信息。 –
你是什麼意思「當我嘗試釋放結構時,它不會發生」?你期望會發生什麼,你如何看待免費沒有發生? – TJD
不知道爲什麼你懶得做typedefs但不使用它們? –