Browse Source

fix index out of bounds exception in ObjTable

Kolja Strohm 1 year ago
parent
commit
1f7a82cbe8
2 changed files with 10 additions and 59 deletions
  1. BIN
      Framework Tests/Framwork.dll
  2. 10 59
      Tabelle.cpp

BIN
Framework Tests/Framwork.dll


+ 10 - 59
Tabelle.cpp

@@ -274,28 +274,12 @@ void ObjTabelle::doMausEreignis(
 // nicht constant
 void ObjTabelle::addSpalte(const char* name) // Spalte hinzufügen
 {
-    lockZeichnung();
-    members->add(new RCArray<Zeichnung>(), spaltenAnzahl);
-    spaltenNamen->add(new Text(name), spaltenAnzahl);
-    spaltenBreite->add(100);
-    msaRam->add(new RCArray<Rahmen>(), spaltenAnzahl);
-    msaAf->add(new RCArray<AlphaFeld>(), spaltenAnzahl);
-    ++spaltenAnzahl;
-    rend = 1;
-    unlockZeichnung();
+    addSpalte(spaltenAnzahl, name);
 }
 
 void ObjTabelle::addSpalte(Text* name)
 {
-    lockZeichnung();
-    members->add(new RCArray<Zeichnung>(), spaltenAnzahl);
-    spaltenNamen->add(name, spaltenAnzahl);
-    spaltenBreite->add(100);
-    msaRam->add(new RCArray<Rahmen>(), spaltenAnzahl);
-    msaAf->add(new RCArray<AlphaFeld>(), spaltenAnzahl);
-    ++spaltenAnzahl;
-    rend = 1;
-    unlockZeichnung();
+    addSpalte(spaltenAnzahl, name);
 }
 
 void ObjTabelle::addSpalte(
@@ -318,39 +302,18 @@ void ObjTabelle::addSpalte(
 
 void ObjTabelle::addSpalte(int sNum, Text* name)
 {
-    if (sNum > spaltenAnzahl) return;
-    lockZeichnung();
-    members->add(new RCArray<Zeichnung>(), sNum);
-    spaltenNamen->add(name, sNum);
-    spaltenBreite->add(100, sNum);
-    minSpaltenBreite->add(0, sNum);
-    maxSpaltenBreite->add(300, sNum);
-    msaRam->add(new RCArray<Rahmen>(), sNum);
-    msaAf->add(new RCArray<AlphaFeld>(), sNum);
-    styles->add(new Array<__int64>(), sNum);
-    ++spaltenAnzahl;
-    rend = 1;
-    unlockZeichnung();
+    addSpalte(sNum, name->getText());
+    name->release();
 }
 
 void ObjTabelle::addZeile(const char* name) // Zeile Hinzufügen
 {
-    lockZeichnung();
-    zeilenNamen->add(new Text(name), zeilenAnzahl);
-    zeilenHeight->add(20);
-    ++zeilenAnzahl;
-    rend = 1;
-    unlockZeichnung();
+    addZeile(zeilenAnzahl, name);
 }
 
 void ObjTabelle::addZeile(Text* name)
 {
-    lockZeichnung();
-    zeilenNamen->add(name, zeilenAnzahl);
-    zeilenHeight->add(20);
-    ++zeilenAnzahl;
-    rend = 1;
-    unlockZeichnung();
+    addZeile(zeilenAnzahl, name);
 }
 
 void ObjTabelle::addZeile(int zNum, const char* name) // Zeile bei zNum einfügen
@@ -375,22 +338,8 @@ void ObjTabelle::addZeile(int zNum, const char* name) // Zeile bei zNum einf
 
 void ObjTabelle::addZeile(int zNum, Text* name)
 {
-    if (zNum > zeilenAnzahl) return;
-    lockZeichnung();
-    zeilenNamen->add(name, zNum);
-    zeilenHeight->add(20, zNum);
-    minZeilenHeight->add(0, zNum);
-    maxZeilenHeight->add(100, zNum);
-    for (int i = 0; i < spaltenAnzahl; ++i)
-    {
-        if (members->z(i)) members->z(i)->add(0, zNum);
-        if (msaRam->z(i)) msaRam->z(i)->add(0, zNum);
-        if (msaAf->z(i)) msaAf->z(i)->add(0, zNum);
-        if (styles->z(i)) styles->z(i)->add(0, zNum);
-    }
-    ++zeilenAnzahl;
-    rend = 1;
-    unlockZeichnung();
+    addZeile(zNum, name->getText());
+    name->release();
 }
 
 void ObjTabelle::removeSpalte(int sNum) // Spalte löschen
@@ -565,6 +514,8 @@ void ObjTabelle::setZeichnungZ(
     if (sNum >= spaltenAnzahl || zNum >= zeilenAnzahl) return;
     lockZeichnung();
     if (!members->z(sNum)) members->set(new RCArray<Zeichnung>(), sNum);
+    while (members->z(sNum)->getEintragAnzahl() <= zNum)
+        members->z(sNum)->add(0);
     members->z(sNum)->set(obj, zNum);
     rend = 1;
     unlockZeichnung();