CodeSnitch, по-видимому, недостаточно умен, чтобы знать, что InitializeCriticalSection () ожидает, что будет работать над структурой, содержащей неинициализированный указатель.
Подумайте об этом с точки зрения CodeSnitch. В чем разница между тем, что вы делаете, и этим:
struct Customer {
char * name;
};
extern void greetCustomer(Customer* c);
class CheckoutLine {
private:
Customer m_customer;
public CheckoutLine() {
greetCustomer(&m_customer);
}
};
Это выглядит более подозрительно для человеческого глаза, потому что мы делаем вывод, что greetCustomer, вероятно, будет полагаться на инициализацию m_customer, чего, очевидно, нет. Но семантически это точно так же, как ваш код.
Вероятно, стоит подать ошибку с Entrek; InitializeCriticalSection () является разумным исключением из правила «структуры должны быть инициализированы перед передачей их в функцию».