tbb并发哈希映射作为结构的成员

时间:2015-07-21 13:38:39

标签: c++ struct hashmap tbb

我希望将并发哈希映射作为结构的成员。我这样做如下:

typedef concurrent_hash_map<int, int> Acreaders;
struct node{ 
    void *obj;  
    int size; // see if required
    Acreaders acrdr;
};

因此我应该能够以下列方式访问哈希表:

Acreaders::accessor a;
struct node *n;
n = (struct node *)malloc(sizeof(struct node));
(n->acrdr).insert(a, 5); 

虽然程序编译正确,但会导致分段错误。

可能是什么问题?感谢..

1 个答案:

答案 0 :(得分:3)

ceedee,

安德拉斯是对的。 mallocing *n没有初始化它,只是在堆上为node分配了空间。如果你做到了:

Acreaders::accessor a;
node nn;               // this constructs nn
node *n(&nn);          // point n to nn

(n->acrdr).insert(a, 5);

如果您想使用node专门动态分配malloc,可以像这样初始化它:

node *n;
n = new(malloc(sizeof(node))) node();  // placement new into space

这将使用malloc在堆上分配空间,并使用展示位置new将节点构建到该空间中。在这种情况下,您必须在释放空间之前调用析构函数:

n->~node();  // destructor frees any additional structures used by node
free(n);

或者如anderas描述的那样,你可以说

n = new node();

完成后,请致电

delete n;

您应始终使用new优先于malloc使用C ++(并且TBB是C ++库。)请参阅In what cases do I use malloc vs new?