<pre><code>AlertEvent::AlertEvent(const std::string&amp; text) :
    IMEvent(kIMEventAlert, alertText.c_str()),
    alertText(text)
{
    //inspection at time of crash shows alertText is a valid string
}


IMEvent::IMEvent(long eventID, const char* details)
{
    //during construction, details==0xcccccccc
}
</code></pre>

<p>on a related note, the monospace font looks really terrible in chrome, whats up with that?</p>

The IMEvent constructor is called before alertText's constructor is called. In particular therefore its argument
```
alertText.c_str()
```
is evaluated before alertText's constructor is called. This ain't good.
Initializer expressions are called in the order that the things being initialized are declared (not necessarily the order the initializers are listed). So parent classes first, then members. Compilers sometime helpfully warn you if you don't list the initializers in the order they will actually be executed. So provided you get that right, the rule is "don't use anything you haven't initialized". This code uses alertText before it is initialized.