Problem mit Template für eine Mehrdimensionale dynamische Array

Hallo,

hast du mal geprüft ob dein Pointer "mProxies" auf einen gültigen Speicherbereich verweist, oder ob er noch auf NULL zeigt? Kannst du mal ein kleines Beispiel Programm posten, dass dein Array verwendet und bei dem der Fehler auftritt. Ich habe es gerade bei mir kurz ausprobiert, da lag ein Problem daran, dass mProxies noch nicht initialisiert war.

Ich frage mich auch, warum deine "init" Methode der Prox Klasse als zweiten Parameter einen Pointer übergeben bekommt der dann intern in einer Variablen gespeichert wird.

Gruß,
Wolf

P.S.: Je nachdem von wo du kommst würde ich dir jetzt vielleicht sogar Glück für den Robocup wünschen ;)
 
P.S.: Je nachdem von wo du kommst würde ich dir jetzt vielleicht sogar Glück für den Robocup wünschen

Austria :), machst du auch mit? Ich bei Rescue B. Für dort ist ja auch der Code, damit ich nicht einen Bufferoweflow bekomme, wenn die Array zu klein ist.

Hier meine derzeitige Testroutine:
C++:
try
   {
   ArrayOfArrays<int> TestArray;

   TestArray.NewSize(10,10,-5,-5);
  
   for(int x = -5;x<5;x++)
      {
      for(int y= -5;y<5;y++)
         {
         TestArray[x][y] = y*10+x;   // Default-Werte zum testen
         }
      }

   TestArray.NewSize(20,20,-5,-5);

   for(int x = -4;x<4;x++)
      {
      for(int y= -4;y<4;y++)
         {
         try{
         std::cout << "\t[" << x << "][" << y <<"]=" << TestArray[x][y];
            }
         catch (...)
            {
            }
         }
      std::cout << std::endl;
      }
   }
   catch( ... )
   {
      std::cout << "Error";
   }
   delete TestArray;

Die 2. Frage wegen dem init, der pointer bestimmt den 0-Punkt der Array (Die Array geht auch mit negativem Index.). Der Pointer ist dazu da dass ich mit einem einfachen ändern des Offsets in der Main-Klass alle Arrays verschieben kann.
 
Zuletzt bearbeitet von einem Moderator:
Hey,

ich habe am Robocup vor 2 und 3 Jahren mit Teil genommen, allerdings in der Robocup @ Home League, daher kann ich dir auf jedenfall ohne schlechtes Gewissen viel Glück wünschen. ;)

So wie ich deine Test-App sehe (ich habe es jetzt nicht gesehen) versucht deine Methode mit

C++:
std::cout << this->mProxies[1][1];

auf einen Null-Pointer zu dereferenziere, was nicht geht und daher zu einem Fehler führt. Du rufst ja erst den Konstruktor auf der das Array "mProxies" mit NULL initialisiert.

C++:
this->mProxies = NULL;

Weist dem Pointer aber nie allokierten Speicher zu, daher der Fehler.

Gruß,
Wolf
 
Zuletzt bearbeitet von einem Moderator:
Thx, ich frage jetzt bei der Copy Funktion ab ob bereits eine Array definiert wurde, und es funktioniert :). Jetzt muss ich nur noch dafür sorgen dass bei einer verschiebung des 0-Punktes die Daten an die richtige Stelle kopiert werden :).

Jetzt kann ich endlich den Code für das erstellen von Levels und die ganzen Lösungsalgorithmen vervollständigen, sobald die Fehlererkennung eingebunden ist :).

mfg, pointhi
 
Hey,

vielleicht noch als weiteren Tipp. Zum kopieren von so zusammenhängendem Speicher wie bei einem Pointer-Array gibt es Funktionen wie memcpy. Die sind wesentlich Effizienter als die einzelnen Elemente mit einer for-Schleife zu kopieren.

Gruß,
Wolf
 
Thx, ich mach alles in C++, und da kannte ich derzeit nur new und delete für solche Arbeiten. Performance ist immer gut, auch wenn die Array vermutlich höchstens alle 30 Sekunden vergrößert werden muss. Das ding ist ja kein highspeed ding, und wenn ich passend arbeite braucht es nie neu zu skallieren.
 
war eigentlich keine frage. Hab nur gesagt das die Performace derzeit noch nicht so wichtig ist, da die Array nur sehr klein ist und nur selten vergrößert wird.
 
Hast du eigentlich schonmal in die Standard Libraries und die Boost Libraries reingeschaut, pointhi? Vielleicht können dir in deinen Situation auch schon sehr hilfreich sein. Zum Beipsiel die Klasse std::vector für Arrays deren Größe sich auch "dynamisch" verändert.

Gruß,
Wolf
 
zumindestens die standard-Library hab ich mir schon angeschaut. Hab std::vector aber wegen irgendwas als untauglich hingestellt. Die Boost-Library müsste ich mir noch mal genauer anschauen. Da hab ich nur kurz reingeschaut.
 
Zurück