[0] new int -- bellek ayrılamadı C?
Basit bir test uygulaması:
cout << new int[0] << endl;
çıkışlar:
0x876c0b8
Çalışıyor gibi görünüyor. Standart bu konuda ne diyor? Her zaman "" boş bellek bloğu? tahsis etmek yasal mı
CEVAP
5.3.4/7
Direkt yeni Bildiricisi bir ifadenin değeri sıfır olduğunda, ayırma işlevi hiçbir öğe ile bir dizi ayırmaya denir.
3.7.3.1/2
Bir işaretçi kaldırma etkisi sıfır boyutunu isteği tanımsız olarak döndü.
Ayrıca
Eğer uzay talep boyutunu [yeni] sıfır değilse bile, isteği başarısız olabilir.
Demek sen de yapabilirsin, ama yasal olarak (iyi tanımlanmış bir şekilde genelinde tüm platformlar) başvuru belleği olsun - sadece geçmek için bir dizi silmek ve silmek.
Burada ayak-ilginç bir not (ben.e standart normatif bir parçası değil, ama açıklayıcı amaçlı dahil) 3.7.3.1/2 cümleye bağlı
[32. Kuralları büyük ölçüde aynıdır. niyet operatör yeni olması() çağıran tarafından uygulanabilir malloc() veya calloc(), C sıfır bir isteği olmayan boş bir işaretçi dönmek için gerektiren, C farklıdır.]
Bellek Sızıntısı Dedektörü Çalışma Pre...
C 11 lambda uygulama ve bellek modeli...
Nasıl java bellek havuzu bölünür?...
Kilitleme birden çok iş parçacığı'...
Toplam bellek Python süreç tarafından ...