diff --git a/Hazard/Hazard/Tools.cpp b/Hazard/Hazard/Tools.cpp index 919b47c..91181ee 100644 --- a/Hazard/Hazard/Tools.cpp +++ b/Hazard/Hazard/Tools.cpp @@ -6,6 +6,7 @@ using namespace std; extern uint numElements; uint* Tools::GrayToBinaryTable = NULL; +uint Tools::GrayToBinaryTableSize = 0; // convert the binary representation of x to a string with the specified length char* Tools::BinaryToChars(uint x, char length) @@ -26,14 +27,21 @@ char* Tools::BinaryToChars(uint x, char length) uint Tools::GrayToBinary(uint x) { - if (Tools::GrayToBinaryTable == NULL) + if (Tools::GrayToBinaryTableSize < numElements && Tools::GrayToBinaryTable != NULL) + { + delete[] Tools::GrayToBinaryTable; Tools::InitGrayToBinaryTable(); + } + else if (Tools::GrayToBinaryTable == NULL) + Tools::InitGrayToBinaryTable(); + return Tools::GrayToBinaryTable[x]; } void Tools::InitGrayToBinaryTable() { Tools::GrayToBinaryTable = new uint[numElements]; + Tools::GrayToBinaryTableSize = numElements; for (uint i = 0; i < numElements; i++) Tools::GrayToBinaryTable[i] = Tools::CalcGrayToBinary(i); } diff --git a/Hazard/Hazard/Tools.h b/Hazard/Hazard/Tools.h index e084739..6ba2889 100644 --- a/Hazard/Hazard/Tools.h +++ b/Hazard/Hazard/Tools.h @@ -9,5 +9,6 @@ public: private: static void InitGrayToBinaryTable(); static uint* GrayToBinaryTable; + static uint GrayToBinaryTableSize; static uint Tools::CalcGrayToBinary(uint x); }; \ No newline at end of file