February 01, 2010

Bir önceki sürümün phobos kütüphanesiyle bağlayınca ben de aynı hatayı alıyorum:

$ dmd deneme.d ~/dmd2.039/linux/lib/libphobos2.a
$ ./deneme
Segmentation fault

Kullandığım dmd 2.040 olduğu halde, özellikle 2.039'un kütüphanesiyle bağladığımda parçalama hatası aldım.

2.040'ın kütüphanesini /usr/lib'e kopyaladın mı?

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 01, 2010

Rica ederim... Başından beri söylediğim gibi, birlikte öğreniyoruz... :)

Bu parçalama hatasının nedeni, bazı sınıfların ve yapıların üyelerinin değişmiş olması.

Örneğin yeni programı derlerken şöyle bir yapı kullanılıyor olsun:

struct BirPhobosYapısı
{
   int birÜye;
   double başkaÜye;
   char buSürümdeEklenenÜye;
}

Bizim yeni programın modülü, doğal olarak o yapı içindeki yeni üyeye de erişiyordur. (Bu sürümde eklendiğine göre bir işe yarıyor olmalı.)

Eski kütüphane dosyası bu yapının eski bir tanımını içerir:

struct BirPhobosYapısı
{
   int birÜye;
   double başkaÜye;
}

ve bizim yeni programın 'buSürümdeEklenenÜye''ye yaptığını sandığı erişim, eski kütüphanede bu yapı nesnesinin dışına erişmiş olur. Artık ondan sonra ne olacağı bilinemez. Çünkü örneğin 'buSürümdeEklenenÜye' bir gösterge olsa, onun gösterdiğini sandığımız belleğe erişmeye çalışılır ve parçalama hatası alınır.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2
Next ›   Last »