Errores, fallos, preguntas - página 1648

 
Alexey Navoykov:
¿No es así como funciona el actual 0?
 
Комбинатор:
¿No es así como funciona el actual 0?

En general, hay mucha confusión ahí, no podemos saber el tamaño real de la memoria asignada para el array para comprobarlo y optimizarlo.

 
O digamos el siguiente caso. Primero ArrayResize(arr, 10, 100); Luego ArrayCopy(arr, arr2, 0, 0, 20); ¿Se reducirá el tamaño de la memoria reservada para el array?
 
Alexey Navoykov:

Si recuerdo bien la explicación, el tamaño de la reserva no disminuirá aunque se le dé explícitamente un número menor.

No es así. A juzgar por el ejemplo de la ayuda, el 0 funciona efectivamente como 0 y entonces la sugerencia del -1 tiene mucho sentido.

 
Por cierto, mi razonamiento sobre reserve_size no es del todo correcto. De hecho, es sólo un paso del cambio de la reserva, pero no la reserva en sí misma. Es decir, probablemente no se almacene en ningún sitio. Pero el tamaño total de la memoria asignada se conoce. Nos gustaría saberlo de alguna manera, e idealmente gestionarlo directamente.

Y reformularé mi sugerencia sobre ArrayResize de la siguiente manera: al especificar reserve_size=-1, la función no debe cambiar el tamaño de la memoria asignada para el array si el parámetro size se encuentra dentro de este rango. Si size > capacidad, el buffer crecerá por supuesto.
 
El array ("inside") almacena el número de elementos del array.

La lógica para trabajar con asignados (código condicional):
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:
El array ("inside") almacena el número de elementos del array.

La lógica del trabajo con asignados (código condicional):

Ya veo, gracias. ¿Y al principio esta asignación es igual a -1, o no? Es decir, en la llamada inicial de ArrayResize(arr, 0, 100) la asignación será?

 
Alexey Navoykov:

¿Esta asignación al principio es igual a -1, o no?

Es igual a 0
Alexey Navoykov:

Es decir, cuando se llama inicialmente a ArrayResize(arr, 0, 100), ¿se producirá la asignación?

La asignación sólo se produce si el tamaño de la matriz cambia hacia arriba. En este caso, el tamaño del array no cambia, porque era igual a 0.

 
FVitalii Ananev:
La diferencia es que en el primer caso no hay error :)
¿Y por qué no hay ningún error en C2C++ en ambos casos? (Ver arriba la respuesta a lo que tiene que ver el C2C++)
 
¿Cómo puedo eliminar una URL de la lista de confianza? El texto de ayuda dice:"Para eliminar una dirección de la lista de confianza, selecciónela y pulse el botón "Eliminar"", pero no existe tal botón.