It really depends on how the memory of the client is structured.
Lets assume its some kind of list because that makes sense.
If its an array-like list with fixed size, there is no reason to store a pointer to the last element other than needing it for a really special purpose.
If its a dynamic list, there might be a reason to store a pointer to the last element. And if the dynamic list has preserved elements for performance reasons, the pointer will not point to the last message, but to the last entry.
So lots of factors.
The memory shows some repeated pattern. That can indicate a fixed size list but it also can mean nothing at all, as this data can be leftover from a previous application. So be really careful with this assumption.
On a fixed list, you'll find a pointer to the list-start and a number of elements in that list. Maybe also an offset to the start depending on how they actually use the fixed size memory.
Also, the address of the text might not be the address you are looking for. The text might be part of a structure that's referenced with an offset. This is another level the pointer scanner has to resolve.
I recommend you to step one level up and get into reverse engineering so you don't have to assume and guess. You can just look inside and see.
I've found this Youtube video that explains how to find pointers without the scanner: