Thank you all for your help. The example code is very close to the actual code and the problem is that sometimes, depending on the computer, because of the operator >> to deserialize the style m_pFont, several m_pFont pointed to the same memory area. I studied the problem with a minimal grid ... and finally realized that in my application I was not using this m_pFont. I modified my code so that I would no longer use it at all, destroy it and set it to NULL which definitively resolved my problem. If I don't fully explain the phenomenon, I think it comes from the fact that these m_pFont contained the same data and that the operators << consider the pointer had already been serialized as explained in the TN002: Persistent Object Data Format | Microsoft Docs ... Maybe ... Regards
Member 9595080
Posts
-
Problem with pointers memory allocation on the same memory area -
Problem with pointers memory allocation on the same memory areaThanks for this interesting link. This one is also interesting : TN002: Persistent Object Data Format | Microsoft Docs
-
Problem with pointers memory allocation on the same memory areaYes, very well spotted ... I wrote the sample code too quickly ;)
-
Problem with pointers memory allocation on the same memory areaThis point is treated by the MFC CArchive::ReadObject and CArchive::WriteObject methods which are automatically called by the >> or << operator. They are able to detecte or serialize the associated RuntimeClass.
-
Problem with pointers memory allocation on the same memory areaWell, in fact, I've two cases : if I serialize with the following way, I've got some CLibStyle::m_pFont on the same memory during the serialization :
CLibStyle Style;
for (int nNumRow = 0; nNumRow ++; nNumRow GetStyleRowCol( nRow, nCol, Style);
Style.Serialize(ar);
}if I serialize with this second way, I've got problem during deserialization in the ar >> m_pFont line : CArchive::ReadObject can't find the corresponding runtime class ...
CLibStyle *pStyle;
for (int nNumRow = 0; nNumRow ++; nNumRow GetStyleRowCol( nRow, nCol, *pStyle);
pStyle->Serialize(ar);
} -
Problem with pointers memory allocation on the same memory areaYou are right. I've just modified and corrected my previous post ...
-
Problem with pointers memory allocation on the same memory areaHello, We use a third party library for our grids. Each grid cell has a style, one member of which is the font:
class CLibStyle
{
[...]
CLibFont m_pFont;
[...]
};During deserialization serialization in the library methods, the font is managed as follows:
ar >> m_pFont;
For our part, we deserialize the styles line by line, column by column, then storing them in a map to use them later:
CLibStyle * pStyle = NULL;
for (int nNumRow = 0; nNumRow ++; nNumRow Serialize(ar);
mapStyle->AddTail(pStyle);
}So far it's very basic but this is where we have a big problem because it happens that this deserialization, as simple as it is, allocates pointers m_pFont on the same memory areas from one loop to another. With the same archive file, this problem does not necessarily arise depending on whether you are in Debug or in Release, or even differs from one PC to another. :~ Afterwards, we inevitably have problems even if the pointers are destroyed ... Any ideas for ensuring that pointers are not allocated on the same memory range? Thanks a lot for your help.
-
Problem with pointers memory allocation on the same memory areaHello, We use a third party library for our grids. Each grid cell has a style, one member of which is the font:
class CLibStyle
{
[...]
CLibFont m_pFont;
[...]
};During serialization in the library methods, the font is managed as follows:
ar >> m_pFont;
For our part, we deserialize the styles line by line, column by column, then storing them in a map to use them later:
CLibStyle * pStyle = NULL;
for (int nNumRow = 0; nNumRow ++; nNumRow Serialize(ar);
mapStyle->AddTail(pStyle);
}So far it's very basic but this is where we have a big problem because it happens that this deserialization, as simple as it is, allocates pointers m_pFont on the same memory areas from one loop to another. With the same archive file, this problem does not necessarily arise depending on whether you are in Debug or in Release, or even differs from one PC to another. :~ Afterwards, we inevitably have problems even if the pointers are destroyed ... Any ideas for ensuring that pointers are not allocated on the same memory range?