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

标签 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

最佳答案

您的 memcpy 调用不正确。

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

所以它首先尝试数组下标t,也就是t在main中的地址。在 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));

关于将结构复制到函数 C 中的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31616981/

相关文章:

c - 什么时候用箭头,什么时候用点?

c - Rust C 互操作段错误(斜线 STATUS_ACCESS_VIOLATION)

golang比较两个实现不同的结构

C - 在数组混淆中存储结构

c - 为了传递给函数,是否值得将矩阵及其维度打包在一个结构中,或者是否可以使用额外的参数?

c - 为什么调用 free() 不会减小堆的大小?

c - C 中对变量求和的函数

c - 排序多维数组

c - C 中的越界地址/指针

c - 为什么 C 编译器在 RET 指令后生成 NOP?