Şimdi Ara

C'de pointer hataları. Acil Yardım ! (Çözüldü)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
3
Cevap
0
Favori
978
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Öncelikle merhaba. Ufak bir proje ödevim var fakat pointer hatalarıyla başım dertte. Program dili C. Proje olduğundan kodun sağlam kısmını error vermeyecek şekilde çıakrtmam gerekti. Kodda mantık aramayın oyüzden .

    1) Yarattığım myHead struct'ını MyFuction fonksiyonuna nasıl yollayacağım ve nasıl kullanacağım? Zira MyFunction içinde ne zaman myHead kullansam deferencing pointer to incomplete type hatası aldım.

    2)myHead structını MyFunction fonksiyonundan bir diğer fonksiyona nasıl yollayacağım/kullanacağım? (Örneğin start fonksiyonu. Henüz ilk sorun yüzünden deneyemedim bile.)


    #include <stdio.h> 
    #include <stdlib.h>

    typedef struct Node{
    int t;
    int ts;
    struct node *next;
    }node;

    typedef struct Head{
    int c;
    struct node *first;
    struct node *tail;
    }head;

    void start(**myHead){ //Henüz yazmadim.
    }

    void MyFunction(head *myHead ){
    node * newNode;

    newNode=((node*)malloc(sizeof(node)));

    //İçinnde MyHead geçen herşey hata veriyor burdan itibaren
    while(newNode->ts >(*myHead)->c){
    start(myHead);
    }
    if(*myHead->first==NULL){
    (*myHead)->first=newNode;
    (*myHead)->tail=newNode;
    }
    else{
    (*myHead)->tail->next = newNode;
    (*myHead)->tail = newNode;
    }
    newNode->next=NULL;
    return;
    }


    int main(void) {
    int choice;
    head * myHead;
    myHead=((head*)malloc(sizeof(head)));

    if(myHead == NULL){ //ERROR CHECK
    printf("Unable to allocate memory\n");
    fflush(stdout);
    return 0;
    }
    else{
    myHead->c=0;
    myHead->first=NULL;
    myHead->tail=NULL;
    choice=0;

    MyFunction(&myHead);// Nasil yollayacagim?



    }

    return 0;
    }





    < Bu mesaj bu kişi tarafından değiştirildi sparkan -- 25 Aralık 2012; 21:03:34 >







  • Neresini düzeltsek bilemedim. Kısaca şöyle söyleyeyim.

    Bir struct elemanına nesnenin kendisi üzerinden erişiyorsan bunu . operatörü ile yaparsın. Yani;

    head myHead;
    myHead.c = 10;

    Yok eğer işaretçi üzerinden erişiyorsan -> ile.

    head *myHead = (head*) malloc(sizeof(head));
    myHead->c = 10;

    veya
    head myHead;
    head *myHeadPtr = &myHead;
    myHeadPtr->c = 42;

    MyFunction içindeki myHead işaretçi olduğu için şöyle erişirsin;
    myHead->first = newNode;

    * ile dereference edince nesnenin kendisi elde edildiği için şöyle de olabilir ama bu gereksiz.

    (*myHead).tail = newNode;

    MyFunction çağrısı işaretçi gönderdiğin için şöyle olmalı.
    MyFunction(myHead); // & yok

    myHead işaretçi değilde struct un kendisi olsaydı senin yaptığın gibi olurdu.




  • quote:

    Orijinalden alıntı: elektro_gadget

    Neresini düzeltsek bilemedim. Kısaca şöyle söyleyeyim.

    Bir struct elemanına nesnenin kendisi üzerinden erişiyorsan bunu . operatörü ile yaparsın. Yani;

    head myHead;
    myHead.c = 10;

    Yok eğer işaretçi üzerinden erişiyorsan -> ile.

    head *myHead = (head*) malloc(sizeof(head));
    myHead->c = 10;

    veya
    head myHead;
    head *myHeadPtr = &myHead;
    myHeadPtr->c = 42;

    MyFunction içindeki myHead işaretçi olduğu için şöyle erişirsin;
    myHead->first = newNode;

    * ile dereference edince nesnenin kendisi elde edildiği için şöyle de olabilir ama bu gereksiz.

    (*myHead).tail = newNode;

    MyFunction çağrısı işaretçi gönderdiğin için şöyle olmalı.
    MyFunction(myHead); // & yok

    myHead işaretçi değilde struct un kendisi olsaydı senin yaptığın gibi olurdu.

    Öncelikle çok teşekkürler.

    myHead'in sonundaki node'a tail işaretçisi ile ulaşıp, o nodun next'ini newNode yapmak istiyorum.
    myHead->tail->next = newNode;
    yapınca yine aynı hatayı veriyor. Bu değişikliği hangi notasyonla yapabilirim?


    Ayrıca söylediğiniz düzeltmeleri yapınca errorlerin yerini assigment from incompatible pointer type warning'i aldı newNode içeren her satır.
    Örneğin;

    myHead->tail = newNode;

    İlk söylediğim errorleri düzeltemediğimden warningleri test edemiyorum

    -------------------------------------

    Structları tanımlarken
    struct node *next; yazmışım. Onlar struct Node *next olacak

    Gözden kaçan bu ufak ama sinir bozucu hatayı da düzeltince kod tıkıt tıkır çalışıyor.



    < Bu mesaj bu kişi tarafından değiştirildi sparkan -- 25 Aralık 2012; 21:06:49 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.