这是我到目前为止所做的事情
struct test_case {
int n;
int *test[];
};
struct test_case *test_case_struct = (struct test_case *)malloc(
sizeof(struct test_struct) + 100 * sizeof(int));
我需要在“测试”指针数组中分配n个指针。据我所知,我需要为结构分配空间,然后为指针数组分配更多空间,但是当我尝试对此进行编译时,出现错误 无效使用sizeof运算符以不完整类型struct test_struct
如果有人可以告诉我,我如何将 n的值用作用户输入,并使 int *测试[n] 成为可能。
答案 0 :(得分:0)
当前您正在使用灵活数组(又名零长度数组)。 可以如下分配。
struct test_case *test_case_struct =
malloc(sizeof (*test_case_struct) + 100 * sizeof (int *));
请注意,代码中*
和错字字int
缺少sizeof(struct test_struct)
。
或者,您可以使用如下所示的指向指针的指针。
struct test_case {
int n;
int **test;
};
struct test_case *test_case_struct = malloc(
sizeof(*test_case_struct));
test_case_struct->test = malloc(100 * sizeof(int *)); // Allocates 100 pointers
答案 1 :(得分:0)
您需要更改
sizeof(struct test_struct)
到
sizeof(struct test_case)
因为test_struct
不是正确的结构类型。
以更好的方式,您还可以使用已声明的变量名称,例如
struct test_case *test_case_struct = malloc(
sizeof (*test_case_struct) + n * sizeof(int*));
也就是说,您需要为弹性成员分配int *
而不是int
的内存。
此外,下面是一个片段,该片段显示了该计数被视为用户输入
int main(void)
{
int n = 0;
puts("Enter the count of pointers");
if (scanf("%d", &n) != 1) {
puts("Got a problem in the input");
exit (-1);
}
struct test_case *test_case_struct = malloc( sizeof(struct test_case) + n * sizeof(int*));
printf("Hello, world!\n");
return 0;
}
答案 2 :(得分:0)
不重复类型名称。您已经偶然发现了自己的代码两次,因为这样做了。您输入了错误的struct标签,并使int*
的{{1}}感到困惑。
更艰苦的分配看起来像这样
int
这里将分配struct test_case *test_case_struct =
malloc(sizeof (*test_case_struct) + sizeof (test_case_struct->test[0]) * 100);
所指向的大小,再加上test_case_struct
应具有的100个大小。现在,您可以使用结构定义,而无需中断对malloc的调用。而且,如果您确实进行了重大更改(例如重命名test_case_struct->test[0]
),编译器会立即通知您。