Mesele, uygulamanın imkansızlığı değil, çoğunlukla tarihi bir eserdir.
Çoğu C derleyicisinin kod oluşturma şekli, derleyicinin bir anda yalnızca her kaynak dosyayı görmesidir; tüm programı bir kerede asla görmez. Bir kaynak dosya başka bir kaynak dosyadan veya bir kitaplıktan bir işlev çağırdığında, tüm derleyici, işlevin gerçek kodunu değil, işlevin dönüş türünü içeren başlık dosyasıdır. Bu, bir işaretçiyi döndüren bir işlev olduğunda, derleyicinin işaretçinin işaret ettiği hafızanın boşaltılması gerekip gerekmediğini söylemenin bir yolu olmadığı anlamına gelir. Buna karar verecek olan bilgi o zaman derleyiciye gösterilmez. Diğer taraftan, bir insan programcısı, işaretçinin ne yapılması gerektiğini bulmak için işlevin kaynak koduna veya belgelere bakmakta özgürdür.
C ++ 11 veya Rust gibi daha modern ve düşük seviyeli dilleri araştırırsanız, bu sorunu çoğunlukla işaretçinin türünde bellek sahipliğini belirgin hale getirerek sorunu çözdüklerini göreceksiniz. C ++ ' da, hafızayı tutmak için unique_ptr<T>
bir ova yerine bir düzlem kullanır ve nesne ovadan farklı olarak nesne kapsamın sonuna ulaştığında hafızanın serbest T*
kalmasını unique_ptr<T>
sağlar T*
. Programlayıcı hafızayı birinden diğerine unique_ptr<T>
verebilir, ancak hafızaya sadece bir tane unique_ptr<T>
işaret edebilir . Bu nedenle, hafızanın sahibi ve ne zaman serbest bırakılması gerektiğine dair her zaman açıktır.
C ++, geriye dönük uyumluluk nedenleriyle, eski stil manuel bellek yönetimine ve böylece a'nın korunmasını engellemek için hataların veya yolların oluşturulmasına izin verir unique_ptr<T>
. Rust, derleyici hataları yoluyla bellek sahipliği kurallarını zorlaması nedeniyle daha da katıdır.
Kararsızlığa gelince, durma problemi ve benzerleri, evet, C anlambilimine sadık kalırsanız, belleğin ne zaman serbest bırakılacağına tüm programlar için karar vermek mümkün değildir. Bununla birlikte, çoğu gerçek program için, akademik alıştırmalar veya buggy yazılımı değil, ne zaman ve ne zaman müsaade edileceğine karar vermek kesinlikle mümkün olacaktır. Bu, insanın ilk başta ne zaman serbest kalamayacağına karar vermesinin tek sebebidir.