0

类定义

class TaskWorker
{
    ...
    private:
            std::list<client_det*> clientList;
    ...

    public:
            void waitForClientResponse();
};

将类成员函数作为线程运行的函数

void* waitForResponse(void* w)
{
    TaskWorker* worker = static_cast<TaskWorker*>(w);
    worker->waitForClientResponse();
}

线程函数实现

void TaskWorker::waitForClientResponse()
{
    client_det* obj = new client_det();
    ...
    clientList.push_back(obj); //valgrind says access violation
    ...
}

这个实现有什么问题吗?
线程类成员函数访问私有成员列表是否有任何限制?

线程调用

int TaskWorker::assign_and_wait(std::list<MulticastGroupInfo*> groupList)
{
     ...
     ...               
     pthread_t tid;
     pthread_create(&tid, NULL, waitForResponse, this);
}

更新

我在没有调试符号的情况下编译了我的代码,并且崩溃消失了。这是我最近的观察。
任何人都可以启发我这里发生了什么?

4

1 回答 1

1

以下是一些可能导致代码中出现分段错误的情况:

  • 的实例TaskWorker可能是NULL因为没有 null 签入void* waitForResponse(void* w)void TaskWorker::waitForClientResponse()这可能会在第一次访问成员变量时导致访问冲突。

  • 请避免任何不安全的 C 风格字符串操作。例如,如果您对 不够小心strcpy,它会溢出您的缓冲区并覆盖一些不相关的内存。

  • 如果多个线程共享clientList(或任何其他共享资源),请确保您有适当的互斥机制。

于 2013-11-01T13:14:36.500 回答