我希望将并发哈希映射作为结构的成员。我这样做如下:
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);
虽然程序编译正确,但会导致分段错误。
可能是什么问题?感谢..
答案 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?