gpt4 book ai didi

c++ - tbb 并发 HashMap 作为结构的成员

转载 作者:行者123 更新时间:2023-11-30 02:37:31 26 4
gpt4 key购买 nike

我想要一个并发 HashMap 作为结构的成员。我这样做如下:

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);

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

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

最佳答案

前辈,

anderas 是正确的。 mallocing *n 不会初始化它,而只是为堆上的 node 分配空间。如果你做到了:

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

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

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

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);

或者像安德拉斯描述的那样,你可以直接说

n = new node();

完成后调用

delete n;

对于 C++(TBB 是一个 C++ 库),您应该始终优先使用 new 而不是 malloc。参见 In what cases do I use malloc vs new?

关于c++ - tbb 并发 HashMap 作为结构的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31540716/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com