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

时间:2015-07-24 18:02:12

标签: c pointers struct dynamic-memory-allocation

我在C

中分配内存存在很大问题

我有这个结构

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

我想创建一个动态添加结构到指针的函数。 类似的东西:

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

到目前为止,我觉得一切都还好,现在功能就是我迷失的地方

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

2 个答案:

答案 0 :(得分:2)

您的memcpy来电不正确。

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

所以它首先尝试数组下标t,这是main中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));

答案 1 :(得分:2)

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

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

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

#include <stdio.h>
#include <stdlib.h>

#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
相关问题