2016-03-18 21 views
0

Bir yapıyı birden çok alt işlemlerden bir ana bilgisayara aktarmaya çalışıyorum.Boru yapıları hatası

yapıları böyle yapılandırılmıştır. Boru ile okuduğumda/yazdığımda ve yapı alanlarını yazdırmaya çalıştığımda, değişkenimin yapıdan bir şey talep ettiğini ancak bir yapı olmadığını söylüyor. İşte

close(fd[0]); 
fclose(inputFile); 
Node* pass = wordList->head; 
write(fd[1], pass, sizeof(Node)); 

Ana kod edilir:

close(fd[1]); 
Node* taken; 
read(fd[0], taken, sizeof(Node)); 
printf("%s, count %d\n", taken->str, taken->num); 

yardımcı ve teşekkür edin

wordc-mp-main.c:123:44: error: request for member ‘num’ in something not a structure or union 
printf("%s, count %d\n", taken->str, taken->num); 
             ^

İşte Çocuk süreçlerinden boru kodudur.

güncelleme: ve düğümlerden * kaldırıldı biri

Node taken = (Node) malloc(sizeof(Node)); 

hiçbir bölme hatalarına olsun yapılmış, ancak benim yapısı düzgün borudan geçemedi.

+2

Ve typedef's 'yoluyla indirection gizlemek yok bu yüzden. – EOF

+0

2 işaretçi içeren bir yapının süreçler arasında gönderilmek için iyi bir aday olmadığını unutmayın. Gönderme işlemindeki işaretçi, genel olarak, kabul sürecinde geçersizdir; İşaretçilerin işaret ettiği verileri geçmediniz. Bu, derleme sorunlarının ötesine geçtiğinizde muhtemelen çökmelere neden olacaktır. –

+0

@ EOF'lar hakkında ayrıntılı bir tartışma için [typedef 'işaretçileri için iyi bir fikir mi?] (Http://stackoverflow.com/questions/750178/is-it-a-good-idea-to-typedef-pointers) puan. –

cevap

0

Node, typedef struct node* Node'dir (yani, Node, zaten bir işaretçi tanımıdır).

Değiştir:

Node *taken; 

içine: Yani, fazladan bir katman var

Node taken; 
+0

Bunu yaptığımda bölümleme hatası aldım. –

+0

Bir alt işlemde ayrılmış belleğe işaretçiler iletir ve üst işlemlerde bunları ayırmaya çalışırsanız bölümleme hataları alırsınız. –

+0

@PaulGriffiths Evet, bu mümkün olabilir [ve bu gibi olasılıklardan haberdardım]. Ancak, OP'nin sorusu bir derleme hatasıyla ilgiliydi. Daha derin analiz yapmak için yeterince yayınlamadı. Belki bu yorumu gördüğünde olacak. –