错误、漏洞、问题 - 页 1648

 
Alexey Navoykov:
目前的0不是这样的吗?
 
Комбинатор:
目前的0不是这样的吗?

总的来说,那里有很多混乱,我们无法知道为数组分配的内存 的真实大小来检查它和优化它。

 
或者说下面这种情况。 首先ArrayResize(arr, 10, 100); 然后ArrayCopy(arr, arr2, 0, 0, 20); 为数组保留的内存大小是否会减少?
 
Alexey Navoykov:

如果我没有记错的话,即使明确给出一个较小的数字,储备规模也不会减少。

错了。从帮助的例子来看,0确实可以作为0,那么-1的建议就很有意义了。

 
顺便说一下,我对reserve_size的推理不太正确。 事实上,它只是reserve变化的一个步骤,但不是reserve本身。 也就是说,它可能没有被存储在任何地方。 但分配的内存的 总大小是已知的。 我们希望以某种方式知道它,最好是直接管理它。

而我将重新表述我对ArrayResize的建议如下:当指定reserve_size=-1时,如果size参数位于这个范围内,函数必须不改变分配给数组的内存大小。 如果size>容量,缓冲区当然会增长。
 
数组("internal")存储了该数组 被分配到多少个元素

与分配的工作逻辑(条件代码)。
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:
数组("internal")存储了该数组 被分配到多少个元素

与分配的工作逻辑(条件代码)。

我明白了,谢谢你。 在开始时,这个分配值等于-1,还是不等于? 也就是说,在最初调用ArrayResize(arr, 0, 100)时,分配值会是多少?

 
Alexey Navoykov:

这个分配在开始时是否等于-1,或者不等于?

等于0
阿列克谢-纳沃伊科夫

也就是说,当ArrayResize(arr, 0, 100)最初被调用时,会发生分配吗?

只有当数组的大小 向上变化时,才会发生分配。在这种情况下,数组的大小并没有改变,因为它等于0。

 
FVitalii Ananev:
不同的是,在第一种情况下,没有错误 :)
而在这两种情况下,为什么C2C++中没有错误?(关于C2C++与此有关的答案见上文)
 
如何从受信任名单中删除一个URL?帮助文本说:"要从受信任的列表中删除一个地址,选择它并按 "删除 "按钮",但没有这样的按钮