Şimdi Ara

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

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
3
Cevap
0
Favori
606
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri
  • Son Yorum 8 yıl
  • Cevaplayan Üyeler 2
  • Konu Sahibinin Yazdıkları 2
  • Ortalama Mesaj Aralığı 5 saat 17 dakika
  • Son 1 Saatteki Mesajlar 1
  • Konuya En Çok Yazanlar
  • sparkan (2 mesaj) Guest-BF8E9B238 (1 mesaj)
  • Konuya Yazanların Platform Dağılımı
  • Masaüstü (1 mesaj)
  • @
0 oy
Öne Çıkar
Tüm Forumlar >> Web Tasarım - Programlama >> Yazılım Geliştirme >> Projeler >> C'de pointer hataları. Acil Yardım ! (Çözüldü)
Sayfaya Git:
Sayfa:
1
Giriş
Mesaj
  • Teğmen
    106 Mesaj
    Konu Sahibine Özel
    Ö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 >



    |
    |




  • Yarbay
    3748 Mesaj
    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.




  • Teğmen
    106 Mesaj
    Konu Sahibine Özel
    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 >
    |
    |




Sayfaya Git:
Sayfa:
1
Reklamlar
Radyo Dinle
vp satın al;valorant vp satın al;Valorant VP Fiyat
Instagram takipçi satın al
Google Play Kodu, LOL RP, Oyun Satış Sitesi
kripto para haberleri
Bu sayfanın
Mobil sürümü
Mini Sürümü

BR2
0,187
1.2.165

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