Erros, bugs, perguntas - página 1648

 
Alexey Navoykov:
Não é assim que o actual 0 funciona?
 
Комбинатор:
Não é assim que o actual 0 funciona?

Em geral, há muita confusão, não podemos saber o tamanho real da memória alocada para que a matriz possa ser verificada e optimizada.

 
Ou digamos o seguinte caso. Primeiro ArrayResize(arr, 10, 100); depois ArrayCopy(arr, arr2, 0, 0, 20); O tamanho da memória reservada para o array será reduzido?
 
Alexey Navoykov:

Se bem me lembro da explicação, o tamanho da reserva não diminuirá mesmo que lhe seja atribuído explicitamente um número menor.

Errado. A julgar pelo exemplo da ajuda, 0 funciona de facto como 0 e depois a sugestão -1 faz muito sentido.

 
A propósito, o meu raciocínio sobre o tamanho_reserva não é totalmente correcto. Na verdade, é apenas um passo de mudança de reserva, mas não de reserva em si. Ou seja, provavelmente não é armazenada em lado nenhum. Mas o tamanho total da memória atribuída é conhecido. Gostaríamos de a conhecer de alguma forma, e idealmente geri-la directamente.

E reformularei a minha sugestão sobre o ArrayResize da seguinte forma: ao especificar o tamanho_reserva=-1, a função não deve alterar o tamanho da memória alocada para o array se o parâmetro tamanho estiver dentro deste intervalo. Se tamanho > capacidade, o buffer crescerá naturalmente.
 
A matriz ("dentro") armazena a quantos elementos a matriz é atribuída.

A lógica para trabalhar com atribuído (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:
A matriz ("dentro") armazena a quantos elementos a matriz é atribuída.

A lógica de trabalhar com atribuído (código condicional):

Vejo, obrigado. E no início esta atribuição é igual a -1, ou não? isto é, na chamada inicial do ArrayResize(arr, 0, 100) a atribuição será?

 
Alexey Navoykov:

É isto atribuído no início igual a -1, ou não?

Igual a 0
Alexey Navoykov:

Isto é, quando o ArrayResize(arr, 0, 100) é chamado inicialmente, ocorrerá a atribuição?

A atribuição só acontece se o tamanho da matriz mudar para cima. Neste caso, o tamanho da matriz não muda, porque era igual a 0.

 
FVitalii Ananev:
A diferença é que, no primeiro caso, não há erro :)
E porque não há erro no C2C++ em ambos os casos? (Ver acima a resposta ao que C2C++ tem a ver com isto)
 
Como posso remover um URL da lista de confiança? O texto de ajuda diz:"Para apagar um endereço da lista de confiança, seleccione-o e prima o botão "Apagar"", mas não existe tal botão.