使用C ++将结构复制到数组中

时间:2015-12-04 16:44:46

标签: c++ arrays struct

我有以下类型的结构

typedef struct Edge
{
    int first;
    int second;

}Edge;

我在主函数中实例化并复制到数组

Edge h_edges[NUM_EDGES];
for (int i = 0; i < NUM_VERTICES; ++i)
    {
        Edge* e = (Edge*)malloc(sizeof(Edge));
        e->first = (rand() % (NUM_VERTICES+1));
        e->second = (rand() % (NUM_VERTICES+1));
        memcpy(h_edges[i], e, sizeof(e));
    }

我一直遇到以下错误。

src/main.cu(28): error: no suitable conversion function from "Edge" to "void *" exists  

第28行是memcpy发生的行。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:6)

您根本不需要使用mallocmemcpy。你可以:

Edge h_edges[NUM_EDGES];
for (int i = 0; i < NUM_VERTICES; ++i)   // or should this be NUM_EDGES??
{
    h_edges[i].first = (rand() % (NUM_VERTICES+1));
    h_edges[i].second = (rand() % (NUM_VERTICES+1));
}

答案 1 :(得分:2)

memcpy的第一个参数需要一个指针,第三个参数需要struct的大小,不是指针。

memcpy(&h_edges[i], e, sizeof(*e));

是修复。

但这是不明智的。严格来说,程序的行为是 undefined 。您无法以定义的方式使用memcpy复制结构。基本上,原因在于结构包装。

最好的办法是明确复制结构成员。你可以建立一个功能来做到这一点。

另一点是,使用%将在随机数中引入统计偏差,除非模数是发电机周期的倍数;这不太可能。

(小点,写Edge* e = malloc(sizeof(Edge));代替。即将演员放在右手边。这在C中是不必要的。)