2016-04-09 29 views
-3

Bu nedenle, iki bağlı bir listede işlemler yapmaya çalışıyorum ve silme mantığını uygulamayı denedim, ancak bir çeşit geçersiz hata gösteriyor. Lütfen bu kodda neyin yanlış olduğunu söyle. Hata mesajı, kod satırının yanında yazılmıştır.Çift Bağlantılı Liste Hatası

void getnewnode(int x) 
{ 
    struct node* temp = (struct node*)malloc(sizeof(struct node*)); 
    temp->data = x; 
    temp->next = NULL; 
    temp->prev = NULL; 
} 

takın fonksiyonunu:

Fonksiyon yeni bir düğüm almak için

void insertatbeg(int x) 
{ 
    struct node* newnode=getnewnode(x); /* void value not ignored as it ought to be. */ 
    if(head==NULL) 
    { 
     head = newnode; 
    } 
    else 
    { 
     head->prev = newnode; 
     newnode->next = head; 
     head = newnode; 
    } 
} 

silin (n'inci düğümü) işlevi:

: Burada
void delete(int n) 
{ 
    struct node* temp1=head; 
    int i; 
    if(temp1 == NULL) 
     return; 
    for(i = 0; i < n-2; i++) 
    { 
     temp1 = temp1->next; 
    } 
    struct node* temp2 = temp1->next; 
    (temp2->next)->prev = temp1; 
    temp1->next = temp2->next; 
    free(temp2); 
} 

ana işlevi olan
struct node /* List called node */ 
{    
    struct node* next; 
    int data; 
    struct node* prev; 
}; 

struct node* head; 

void insertatbeg(int x); 
void delete(int n); 
int main() 
{  
    int x; 
    head = NULL; 
    insertatbeg(x); 
    insertatbeg(x); 
    insertatbeg(x); 
    delete(2); 
} 
Özellikle

void getnewnode(int x) 
{ 
    struct node* temp = (struct node*)malloc(sizeof(struct node*)); 
    temp->data = x; 
    temp->next = NULL; 
    temp->prev = NULL; 
} 

, ilk satırda:

+2

Lütfen kodunuzun okunabilir olmasını sağlayın. –

+2

Ve lütfen tam hata mesajını gönderin. –

+1

işlevi: 'getnewnode()', sorunun hatalarını ayıklamak açısından çok önemli görünüyor. ve 'delete()' ın problemle ilgisi yok, bu yüzden neden göndersiniz? Lütfen kodu yazınız: 'getnewnode()'; – user3629249

cevap

0

senin sorunun burada bana görünüyor. Büyük olasılıkla, sizeof(struct node) olmasını istersiniz, böylece işaretçiniz bir düğüme değil, bir düğüme işaret eder.

Ayrıca, işlevinizin bir değer döndürmesini sağlamanız da gerekir.

void getnewnode(int x) 
{ 
    .... 
    return temp; 
} 

Bu hatta hata alıyorsanız nedeni:: Yani bunu değiştirmek

struct node* newnode=getnewnode(x); /* void value not ignored as it ought to be. */ 

sizin getnewnode işlev bir değer döndürmüyor mi. Dolayısıyla newnode bir değere atanamaz. Önerilen değişikliği getnewnode()'a getirdiğinizde bu hata giderilmelidir.

+0

Peki, önerdiğin gibi iade beyanı ekledim. Ancak, hala aynı hatayı gösteriyor. Garip, sanırım. –

+0

@KartikV: Derleyici çıktıları * kesin * hata iletisi nedir? –