Hatalar, hatalar, sorular - sayfa 1648

 
Alexey Navoykov :
Mevcut 0 böyle çalışmıyor mu?
 
Комбинатор :
Mevcut 0 böyle çalışmıyor mu?

Eh, teorik olarak, bu sıfır rezerv anlamına gelir. Ve ekstra bellek muhtemelen geri dönüştürülür. Genel olarak, bununla ilgili birçok belirsizlik vardır, bunu kontrol etmek ve işi optimize etmek için diziye ayrılan belleğin gerçek boyutunu bulamıyoruz.

 
Ya da durum bu diyelim. İlk ArrayResize (dizi, 10, 100); Ardından ArrayCopy(dizi, dizi2, 0, 0, 20); Dizi için ayrılmış belleğin boyutu azalacak mı?
 
Alexey Navoykov :

Açıklamaları doğru hatırlıyorsam, açıkça daha küçük bir sayı verilse bile rezerv boyutu azalmayacaktır.

Doğru değil. Yardımdaki örneğe bakılırsa, 0 gerçekten 0 gibi çalışıyor ve -1 ile ilgili öneri çok mantıklı.

 
Bu arada, rezerv_boyutu hakkında tam olarak doğru bir neden yapmadım. Aslında, aslında bu, rezervin kendisini değiştirmenin sadece bir adımıdır, yedeğin kendisini değil. Onlar. muhtemelen hiçbir yerde saklanmaz. Ancak ayrılan belleğin toplam boyutu bilinmektedir. Burada onu bir şekilde bilmek ve ideal olarak doğrudan yönetmek istiyoruz.

ArrayResize ile ilgili teklifi şu şekilde yeniden formüle edeceğim: Reserve_size=-1 ayarlanırken, size parametresi bu aralık içindeyse fonksiyon dizi için ayrılan bellek boyutunu değiştirmemelidir. Boyut > kapasite ise, arabellek kendiliğinden artacaktır.
 
Dizi ("inside"), ayrılan - dizinin kaç öğenin altına ayrıldığını saklar.

Yedekle çalışmanın mantığı (koşullu kod):
 ArrayResize (arr, int size, int reserve)
  {
   if (arr.allocated<size)
       if (!ArrayAllocateMemory(arr,size+reserve))   // -> arr.allocated=size+reserve;
         return (- 1 );
   //---
   CallConstructorsOrDestructors(arr,size);
   //---
   arr.size=size;
   return (size);
  }
 
Ilyas :
Dizi ("inside"), ayrılan - dizinin kaç öğenin altında ayrıldığını saklar.

Yedekle çalışmanın mantığı (koşullu kod):

Tamam teşekkürler. Ve en başta, bu tahsis edilen -1'e eşit mi, değil mi? Onlar. ArrayResize(arr, 0, 100) için yapılan ilk çağrıda bir tahsis olacak mı?

 
Alexey Navoykov :

Ve en başta, bu tahsis edilen -1'e eşit mi, değil mi?

0'a eşittir
Alexey Navoykov :

Onlar. ArrayResize(arr, 0, 100) için yapılan ilk çağrıda bir tahsis olacak mı?

Tahsis, yalnızca dizinin boyutu yukarı doğru değişirse gerçekleşir. Bu durumda dizinin boyutu değişmez çünkü 0'a eşitti

 
FVitalii Ananev :
Aradaki fark, ilk durumda hata olmamasıdır :)
Neden her iki durumda da C\C++'da hata yok? (C\C++ ile ne alakası var sorusunun cevabı, yukarıya bakın)
 
İzin verilen adresler listesinden bir URL nasıl kaldırılır? Yardım diyor ki: " Güvenilir listeden bir adresi silmek için seçin ve "Sil" düğmesine basın", ancak bu düğme orada değil.