2013-10-27 75 views
-2

您好我試試這個於2010年VS運行這段代碼,我也得到崩潰的告訴我說:用C雙向鏈表崩潰

這可能是由於堆的腐敗,這表明在TEST_5的錯誤.exe或任何已加載的DLL。

這也可能是由於用戶在TEST_5.exe有焦點時按下F12。

輸出窗口可能有更多診斷信息。 程序'[4620] TEST_5.exe:Native'已退出,代碼爲0(0x0)。

和我在borland c編譯器上有同樣的崩潰,但在開發cpp的工作。 所以這是我的代碼請幫助

#include <stdio.h> 
#include <stdlib.h> 
struct node{ 
    int ID; 
    int active; 
    int loop_time; 
    float c; 
    int a; 
    struct node *prev,*next; 
}; 
struct node *new_node(struct node *p) 
{ 
    struct node *temp,*prev; 
    if(p==NULL) 
    { 
     p=(struct node*)malloc(sizeof(struct node*)); 
     p->prev=NULL; 
     p->next=NULL; 
     return p; 
    } 
    if(p!=NULL) 
    { 
     temp=p; 
     while(temp!=NULL) 
     { 
      prev=temp; 
      temp=temp->next; 
     } 
     temp=(struct node*)malloc(sizeof(struct node*)); 
     temp->prev=prev; 
     temp->next=NULL; 
     prev->next=temp; 
     return temp; 
    } 
    return 0; 
} 
void main() 
{ 
    struct node *force1=NULL; 
    //============================= 
    force1=new_node(force1); 
    force1->ID=11; 
    force1->active=11; 
    force1->loop_time=0; 
    //============================== 
    force1=new_node(force1); 
    force1->ID=11; 
    force1->active=11; 
    force1->loop_time=0; 
    //============================== 
    printf("END\n"); 
system("pause"); 
} 
+2

它在哪裏崩潰?調試時發現了什麼? – Kunal

回答

4
p=(struct node*)malloc(sizeof(struct node*)); 

temp=(struct node*)malloc(sizeof(struct node*)); 

應該

p=malloc(sizeof(struct node)); 
temp=malloc(sizeof(struct node)); 

甚至更​​好

p=malloc(sizeof *p); 
temp=malloc(sizeof *temp); 

您只需爲指針分配足夠的空間,而不是爲整個結構分配足夠的空間。

請注意,從new_node()泄漏的第一次;在第二個new_node()調用返回後沒有辦法達到它。

+1

+1爲好的答案。爲了搭載,OP也可能希望考慮在某些時候釋放內存。目前的計劃存在內存泄漏;儘管這個小例子不是問題。 – AndyG

+0

感謝它的工作,p = malloc(sizeof * p);對我來說很有意思 –