将Struct复制到函数C中的指针数组

我在C中分配内存有一个很大的问题

我有这个结构

typedef struct{ int x; int y; }T; 

我想创建一个动态添加结构到指针的函数。 就像是:

 int main() { T* t; f(&t); free(t); } 

到目前为止,我认为一切都很好,现在function是我迷路的地方

 void f(T** t) { T t1; T t2; T t3; //first i malloc *t=malloc(sizeof(T)*T_MAX_SIZE);//i want another function to make the array bigger, but this is not as important as the problem t1.x=11; t1.y=12; t2.x=21; t2.y=22; t3.x=31; t3.y=32; //now i want to copy the values from t1,t2,t3 to t[0],t[1],t[2] memcpy(&(*t[0]),&t1,sizeof(T)); memcpy(&(*t[1]),&t2,sizeof(T)); memcpy(&(*t[2]),&t3,sizeof(T)); } 

我不知道复制这些结构的正确方法。

这样做的目的是使用t函数(在主要)

非常感谢:D

您的memcpy通话不正确。

在表达式&(*t[0]) ,数组索引具有最高优先级,后跟指针间接。 因此,使用显式括号,它看起来像&(*(t[0]))

所以它首先尝试数组下标t ,这是主要的t的地址。 在t[0]的情况下它仍然有效,但是t[1]引用了一些超过该变量的东西,调用了未定义的行为。 你想要t指向的数组索引,即(*t)[i]

所以memcpy调用应该是:

 memcpy(&((*t)[0]),&t1,sizeof(T)); memcpy(&((*t)[1]),&t2,sizeof(T)); memcpy(&((*t)[2]),&t3,sizeof(T)); 

您不需要任何复制function来将一个结构分配给另一个 – 您只需将它们等同起来。 所以,如果你有

 T var1 = {1, 2}; T var2 = var1; 

整个var1被复制到var2 。 修改您的(简化)计划:

 #include  #include  #define T_MAX_SIZE 10 typedef struct{ int x; int y; }T; void f(T** t) { T t1; *t=malloc(sizeof(T)*T_MAX_SIZE); t1.x=11; t1.y=12; (*t)[0] = t1; } int main(void) { T* t; f(&t); printf ("Result %d %d\n", t[0].x, t[0].y); free(t); return 0; } 

节目输出:

 Result 11 12