我有以下类型的结构
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发生的行。任何帮助表示赞赏。
答案 0 :(得分:6)
您根本不需要使用malloc
或memcpy
。你可以:
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中是不必要的。)