Seb*_*nik 2 c++ mutex critical-section
// A Mutex allows threads mutually exclusive access to a resource.
//-----------------------------------------------------------------------
class Mutex
{
private:
CRITICAL_SECTION m_mutex;
public:
Mutex() { InitializeCriticalSection(&m_mutex); }
~Mutex() { DeleteCriticalSection(&m_mutex); }
void acquire() { EnterCriticalSection(&m_mutex); }
void release() { LeaveCriticalSection(&m_mutex); }
};
Run Code Online (Sandbox Code Playgroud)
使用Entrek Codesnitch软件调试和测试任何内存泄漏等,它报告以下错误:
InitializeCriticalSection Error: lpCriticalSection (0x000387d4) points to an invalid
memory location (0x00018984) Mutex::Mutex in lockmutex.h, line 29
Run Code Online (Sandbox Code Playgroud)
也许我所有不眠之夜终于到了我的身边.但我不明白它究竟在抱怨什么.有任何想法吗?
CodeSnitch显然不够聪明,不知道InitializeCriticalSection()期望处理包含未初始化指针的结构.
从CodeSnitch的角度来看它.你正在做什么和这之间有什么区别:
struct Customer {
char * name;
};
extern void greetCustomer(Customer* c);
class CheckoutLine {
private:
Customer m_customer;
public CheckoutLine() {
greetCustomer(&m_customer);
}
};
Run Code Online (Sandbox Code Playgroud)
这看起来对人眼更加腥,因为我们推断greetCustomer可能会依赖于m_customer被初始化,这显然不是.但从语义上讲,这与您的代码完全相同.
可能值得向Entrek提交一个错误; InitializeCriticalSection()是"结构应该在传递给函数之前初始化"规则的合理例外.