使用malloc'd指针的Seg Fault

时间:2010-05-16 08:19:55

标签: c++ pointers malloc segmentation-fault

我正在创建一个线程类,用作pthreads的包装器。我有一个Queue类用作队列,但我遇到了麻烦。它似乎很好地分配和填充队列结构,但是当我尝试从中获取数据时,它就是Seg。故障。

http://pastebin.com/Bquqzxt0(printf是用于调试的,都是抛出seg错误)

编辑:队列存储在动态分配的“struct queueset”数组中,作为指向数据的指针和数据的索引

1 个答案:

答案 0 :(得分:3)

C ++为您提供了一个内置队列类:

#include <queue>

struct queueset
{
    void* ptr;
    int index;

    queueset(void* p, int i) : ptr(p), index(i) {}
};

class pthreadmutexlock
{
public:
    pthreadmutexlock()
    {
        pthread_mutex_init(&lock, NULL);
        pthread_mutex_lock(&lock);
    }

    ~pthreadmutexlock()
    {
        pthread_mutex_unlock(&lock);
        pthread_mutex_destroy(&lock);
    }
private:
    pthread_mutex_t lock;
};

class ThreadSafeQueue
{
public:
    void add(void* msg, int index);
    queueset get();
    bool hasitems() const { return !queue.empty(); }
private:
    std::queue<queueset> queue;
    pthread_mutex_t lock;
};

void ThreadSafeQueue::add(void* msg, int index)
{
    pthreadmutexlock lock;
    queue.push(queueset(msg, index));
}

queueset ThreadSafeQueue::get()
{
    pthreadmutexlock lock;
    queueset temp = queue.front();
    queue.pop();
    return temp;
}

在C ++中,避免内存问题的最佳方法是尽可能减少使用原始指针的内存管理,并在适用的地方使用标准类。