Bir boşluk işaretçisini doğrudan soruna neden olmadan uzun kestirmek mümkün mü? Aşağıda, here kodundan çıkarılan küçük bir kod pasajı var (örneğin, sayfanın Pthread Katılımı bölümü). this manual page gibiType-casting void * to long
{
void *status;
long t;
rc = pthread_create(&thread[t], &attr, BusyWork, (void *)t);
rc = pthread_join(thread[t], &status);
printf("Main: completed join with thread %ld having a status of %ld\n",t,(long)status);
}
pthread_join() kopya hedef dişin çıkış durumu (yani hedef iplik pthread_exit() verilen bu değer) konuma bunda * dönüş_değeri (* durumlarına göre işaret söylüyor vaka). Ama bahsettiğim programda, durum herhangi bir yere işaret etmiyor. Öyleyse program hala nasıl çalışıyor?
Ve ikincisi, benim bilgim söz konusu olduğunda, durum uzun bir değer tutamazsa o zaman, typecasting durumu bize uzun ve bir adres olmayan bir değer verir?
yinelenen:
Busywork()
fonksiyonuna geri tarafından gerçek değerini almak:Ardından 'sorun'
Not kaybolur
:kullanarak öner // stackoverflow .com/questions/12949383/converting-primitive-data-type-to-void-pointer-type? –
@MartinR: [Bu] (http://man7.org/linux/man-pages/man3/pthread_join.3.html), ** pthread_join() öğesinin hedef iş parçacığının çıkış durumunu kopyalar. pthread_exit (3) 'e sağlanan hedef iş parçacığının * retval ** ile işaret ettiği yere değeri.Ama bahsettiğim programda, _status_ herhangi bir yere işaret etmiyor, o zaman bu program nasıl çalışıyor? –
Bu tesadüfen çalışır. Değişken durumu başlatılmamıştır, bu yüzden durumun işaret ettiği yere yazacaktır. Şans eseri, yasal bir yerde olabilir. Eğer yasa dışı bir yerde ise, bir kaza olacak. – cup