Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

RichTextBox::AppendText misbehavior

0 views
Skip to first unread message

rwf_20

unread,
Nov 2, 2007, 2:19:09 PM11/2/07
to
I've got a form that contains a RichTextBox control and periodically
receives strings to append to it. The function in question is below.
I've been receiving mysterious bug reports of application crashes
('Attempt to Read/Write Protected Memory', 'Object Reference not set
to instance of an object') which I cannot recreate. In the reports,
however, it seems that the crash occurs just after (or possibly
during) a sequence of calls to this function.

For the record, this function is only called by the thread that
created it.

I decided to check out this function using DevPartner's Error
Detection tool, and it occasionally triggers a 'Overrun detected'
error during the call to 'AppendText'. Details of the error simply
point to 'riched20.dll'. What character is being appended (or how
many) does not appear to matter, the fault occurs seemingly randomly.

Putting two and two together, an overflow of some sort could explain
the application crashes, as well as why they aren't consistent or
reproducible.

Questions:
1. Is there anything wrong with the code below? Note that I'm using
VS2005 with /clr:oldSyntax.
2. Does anyone know of any issues along these lines in riched20.dll?
Googling shows a number of issues, but none that seem relevant.

Any suggestions would be greatly appreciated.

Ryan


void myDialog::OutputMessage(const std::string& message) {
String* str = message.c_str();
Drawing::Font* boldFont = new Drawing::Font(S"Monospac821 BT", 9.25F,
System::Drawing::FontStyle::Bold,
System::Drawing::GraphicsUnit::Point, (System::Byte)0);
Drawing::Font* regularFont = m_outputWindow->get_Font();

// Set the default font and color
m_outputWindow->set_SelectionFont(regularFont);
m_outputWindow->set_SelectionColor(Drawing::Color::Black);

// Parse through the characters looking for font formating
for (int ii = 0; ii != str->get_Length(); ++ii) {
__wchar_t currChar = str->get_Chars(ii);

// Parse for font options, setting boldFont or regularFont
appropriately
// ... clipped for brevity

// Append the character
String* curStr = new String(currChar, 1);
m_outputWindow->AppendText(curStr); // this line triggers
DevPartner ErrorDetection
}

m_outputWindow->AppendText(S"\r\n");

// scroll along with our message(s)
m_outputWindow->set_SelectionStart(m_outputWindow->get_Text()-
>get_Length());
m_outputWindow->Focus();
m_outputWindow->ScrollToCaret();
}

0 new messages