Fehler, Irrtümer, Fragen - Seite 1648

 
Alexey Navoykov:
Funktioniert so nicht die aktuelle 0?
 
Комбинатор:
Funktioniert so nicht die aktuelle 0?

Im Allgemeinen herrscht hier eine große Verwirrung, da wir die tatsächliche Größe des zugewiesenen Speichers für das Array nicht kennen, um ihn zu überprüfen und zu optimieren.

 
Oder nehmen wir den folgenden Fall an: Zuerst ArrayResize(arr, 10, 100); Dann ArrayCopy(arr, arr2, 0, 0, 20); Wird die Größe des reservierten Speichers für das Array reduziert?
 
Alexey Navoykov:

Wenn ich mich richtig an die Erklärung erinnere, wird die Größe der Reserve auch dann nicht verringert, wenn ihr ausdrücklich eine kleinere Zahl zugewiesen wird.

Falsch. Nach dem Beispiel in der Hilfe zu urteilen, funktioniert 0 tatsächlich als 0, und der Vorschlag -1 ist dann sehr sinnvoll.

 
Übrigens ist meine Argumentation bezüglich reserve_size nicht ganz korrekt. Tatsächlich ist es nur ein Schritt der Reserveänderung, aber nicht die Reserve selbst. Das heißt, sie wird wahrscheinlich nirgendwo gespeichert. Aber die Gesamtgröße des zugewiesenen Speichers ist bekannt. Wir würden sie gerne irgendwie kennen und idealerweise direkt verwalten.

Und ich werde meinen Vorschlag zu ArrayResize wie folgt umformulieren: wenn reserve_size=-1 angegeben wird, darf die Funktion die für das Array zugewiesene Speichergröße nicht verändern, wenn der Parameter size innerhalb dieses Bereichs liegt. Wenn size > capacity, wird der Puffer natürlich wachsen.
 
Im Array ("inside") wird gespeichert, wie viele Elemente dem Array zugewiesen sind.

Die Logik für die Arbeit mit zugewiesenem (bedingtem) Code:
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:
Im Array ("inside") wird gespeichert, wie viele Elemente dem Array zugewiesen sind.

Die Logik der Arbeit mit zugewiesenem (bedingtem) Code:

Ich verstehe, danke. Und am Anfang ist diese Zuordnung gleich -1, oder nicht? D.h. beim ersten Aufruf von ArrayResize(arr, 0, 100) wird die Zuordnung sein?

 
Alexey Navoykov:

Ist diese Zuweisung am Anfang gleich -1 oder nicht?

Ist gleich 0
Alexey Navoykov:

D.h. wenn ArrayResize(arr, 0, 100) anfänglich aufgerufen wird, wird die Zuordnung erfolgen?

Die Zuweisung erfolgt nur, wenn sich die Größe des Arrays nach oben ändert. In diesem Fall ändert sich die Größe des Arrays nicht, da sie gleich 0 war.

 
FVitalii Ananev:
Der Unterschied ist, dass im ersten Fall kein Fehler auftritt :)
Und warum tritt in C2C++ in beiden Fällen kein Fehler auf? (Siehe oben für die Antwort auf die Frage, was C2C++ damit zu tun hat)
 
Wie kann ich eine URL aus der Liste der vertrauenswürdigen Sites entfernen? Im Hilfetext heißt es:"Um eine Adresse aus der Liste der vertrauenswürdigen Adressen zu löschen, markieren Sie sie und drücken Sie die Schaltfläche "Löschen"", aber es gibt keine solche Schaltfläche.