Errori, bug, domande - pagina 1648

 
Alexey Navoykov:
Non è così che funziona l'attuale 0?
 
Комбинатор:
Non è così che funziona l'attuale 0?

In generale, c'è molta confusione lì, non possiamo sapere la dimensione reale della memoria allocata per l'array per controllarla e ottimizzarla.

 
O diciamo il seguente caso. Prima ArrayResize(arr, 10, 100); Poi ArrayCopy(arr, arr2, 0, 0, 20); La dimensione della memoria riservata per l'array sarà ridotta?
 
Alexey Navoykov:

Se ricordo bene la spiegazione, la dimensione della riserva non diminuisce anche se le viene dato esplicitamente un numero più piccolo.

Sbagliato. A giudicare dall'esempio dell'aiuto, 0 funziona effettivamente come 0 e quindi il suggerimento -1 ha molto senso.

 
A proposito, il mio ragionamento su reserve_size non è del tutto corretto. Infatti, è solo un passo del cambiamento della riserva, ma non la riserva stessa. Cioè, probabilmente non è memorizzato da nessuna parte. Ma la dimensione totale della memoria allocata è nota. Vorremmo conoscerla in qualche modo, e idealmente gestirla direttamente.

E riformulerò il mio suggerimento su ArrayResize come segue: quando si specifica reserve_size=-1, la funzione non deve cambiare la dimensione della memoria allocata per l'array se il parametro size si trova in questo intervallo. Se size > capacità, il buffer crescerà naturalmente.
 
L'array ("inside") memorizza quanti elementi sono allocati nell'array.

La logica per lavorare con le allocazioni (codice condizionale):
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:
L'array ("inside") memorizza quanti elementi sono allocati nell'array.

La logica del lavoro con le allocazioni (codice condizionale):

Capisco, grazie. E all'inizio questa allocazione è uguale a -1, o no? Cioè alla chiamata iniziale di ArrayResize(arr, 0, 100) l'allocazione sarà?

 
Alexey Navoykov:

Questo allocato all'inizio è uguale a -1, o no?

Uguale a 0
Alexey Navoykov:

Cioè quando ArrayResize(arr, 0, 100) viene chiamato inizialmente, si verifica l'allocazione?

L'allocazione avviene solo se la dimensione dell'array cambia verso l'alto. In questo caso, la dimensione dell'array non cambia, perché era uguale a 0.

 
FVitalii Ananev:
La differenza è che nel primo caso non c'è nessun errore :)
E perché non c'è nessun errore in C2C++ in entrambi i casi? (Vedi sopra per la risposta a ciò che C2C++ ha a che fare con questo)
 
Come faccio a rimuovere un URL dalla lista di fiducia? Il testo di aiuto dice:"Per eliminare un indirizzo dalla lista di fiducia, selezionalo e premi il pulsante "Elimina"", ma non c'è un pulsante simile.