I've discovered a bug in CDictionary. When you use the Reset Method it deletes the CList object in m_data. Subsequent calls to other methods that fetch the point from the dictionary receive a bad pointer in return. Example:
I've discovered a bug in CDictionary. When you use the Reset Method it deletes the CList object in m_data. Subsequent calls to other methods that fetch the point from the dictionary receive a bad pointer in return. Example:
I would propose the following fix for all methods which use the key hash to access a CList object from the m_data array.
Thanks nicoli shen. Your solution is the 'safer' one. However, I cannot reproduce the issue.
Another thing that bothers me related to this: an object pointer should be able to accept a null value. m_data is a dynamic array, so it should return null when an unfilled index from the array is retrieved, or the item stored is deleted. Storing data from m_data to CList* without checking the pointer beforehand is also done on other methods like Get() and Delete(), so the test scripts above should also fail if this issue exists. A simple assignment between one pointer and another can be done without any pointer access errors, even if the object the lvalue points to is already deleted:
#include <Object.mqh>
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---
CObject *obj = new CObject();
delete obj;
CObject *obj1 = obj; //no invalid pointer access errors
}
//+------------------------------------------------------------------+
The issue can be reduced to the example above. But in this case, there are no pointer errors. I am curious because I remember encountering this same problem in an earlier build, which was quickly patched.
I am currently using MT5 build 1932, but let me know if I am missing something.
This code demonstrates excellent functionality and leverages CObject inheritance, enabling seamless integration with CArray structures within the dictionary.
Allow the use of cookies to log in to the MQL5.com website.
Please enable the necessary setting in your browser, otherwise you will not be able to log in.
You are signed in. Two-factor authentication has been disabled. Set it up again and scan a new QR code, or continue with two-factor authentication disabled.
I've discovered a bug in CDictionary. When you use the Reset Method it deletes the CList object in m_data. Subsequent calls to other methods that fetch the point from the dictionary receive a bad pointer in return. Example:
I would propose the following fix for all methods which use the key hash to access a CList object from the m_data array.
I've discovered a bug in CDictionary. When you use the Reset Method it deletes the CList object in m_data. Subsequent calls to other methods that fetch the point from the dictionary receive a bad pointer in return. Example:
I would propose the following fix for all methods which use the key hash to access a CList object from the m_data array.
Thanks nicoli shen. Your solution is the 'safer' one. However, I cannot reproduce the issue.
Another thing that bothers me related to this: an object pointer should be able to accept a null value. m_data is a dynamic array, so it should return null when an unfilled index from the array is retrieved, or the item stored is deleted. Storing data from m_data to CList* without checking the pointer beforehand is also done on other methods like Get() and Delete(), so the test scripts above should also fail if this issue exists. A simple assignment between one pointer and another can be done without any pointer access errors, even if the object the lvalue points to is already deleted:
The issue can be reduced to the example above. But in this case, there are no pointer errors. I am curious because I remember encountering this same problem in an earlier build, which was quickly patched.
I am currently using MT5 build 1932, but let me know if I am missing something.
I have these error:
'Key' - unexpected token, probably type is missing? Dictionary.mqh 39 23
'Key' - function already defined and has different type Dictionary.mqh 39 23
see declaration of 'CDictionaryEntryBase::Key' Dictionary.mqh 20 22
trying to complie on build 3320
I have these error:
'Key' - unexpected token, probably type is missing? Dictionary.mqh 39 23
'Key' - function already defined and has different type Dictionary.mqh 39 23
see declaration of 'CDictionaryEntryBase::Key' Dictionary.mqh 20 22
trying to complie on build 3320