有几个问题:
因为你使用了typedef,所以你不需要在你的数据类型前面加上'struct':
data_pack* packet = malloc(sizeof(data_pack));
并且因为您已将 in_array 声明为 void ptr,所以不应将其强制转换为 double:
packet->in_array= malloc(100 * sizeof(double));
(其实是don't cast the result of malloc to anything..)
编辑:
针对评论,如果您想要一个 double 类型的数组,您可以将 data_pack 的声明更改为:
typedef struct{
int message;
double *in_array;
}data_pack;
然后把它当作一个数组:
packet->in_array[0] = 0.1;
packet->in_array[1] = 0.2;
等等;但是如果你想要一个指向 double 的指针数组,那么你将 in_array 的声明更改为:
typedef struct{
int message;
double **in_array;
}data_pack;
而且,由于您现在存储的是 指向双精度的指针数组而不是双精度,因此您将 in_array 的 malloc 更改为:
packet->in_array= malloc(100 * sizeof(double *));
然后,您可以将指向双精度的指针添加到该数组,例如:
double foo = 0.1;
packet->in_array[0] = &foo;
编辑 2
要将一个数组的内容复制到另一个数组,请使用 memcpy:
#include <string.h>
double foo[100] = {0.1,0.2};
memcpy( packet->in_array, foo, sizeof(foo));
它是双向的:
double foo[100] = {};
memcpy( foo, packet->in_array, sizeof(foo));