处理错误 - C 中结构体之前的预期表达式



我正在尝试使用在此线程C上建议的代码实现一个动态数组 动态增长数组. 我想从函数返回一个结构数组,但我在foo()的第一行收到错误("struct"之前的错误预期表达式(。 我见过许多其他这样的例子,但解决方案似乎并不适用。 如果其中一个这样做,我深表歉意。 这是我的完整代码:

typedef struct {
int *array;
size_t used;
size_t size;
} Array;
void initArray(Array *a, size_t initialSize) {
a->array = (int *)malloc(initialSize * sizeof(int));
a->used = 0;
a->size = initialSize;
}
void insertArray(Array *a, int element) {
// a->used is the number of used entries, because a->array[a->used++] 
//updates a->used only *after* the array has been accessed.
// Therefore a->used can go up to a->size
if (a->used == a->size) {
a->size *= 2;
a->array = (int *)realloc(a->array, a->size * sizeof(int));
}
a->array[a->used++] = element;
}
void freeArray(Array *a) {
free(a->array);
a->array = NULL;
a->used = a->size = 0;
}
struct Array foo ()
{
Array a;
int i;
initArray(&a, 5);  // initially 5 elements
for (i = 0; i < 100; i++)
insertArray(&a, i);  // automatically resizes as necessary
printf("%dn", a.array[9]);  // print 10th element
printf("%dn", a.used);  // print number of elements
freeArray(&a);
return struct Array a;
}

我看到的第一个问题是您在最后一行指定了一个类型

return struct Array a;

应该只是

return a;

但是,另一个问题是您没有动态分配数组并返回指针,因此在此函数完成后,a的值可能会被覆盖,因为它是在堆栈上分配的。试试这个:

Array* foo() {
Array *a = malloc(sizeof(Array));
int i;
initArray(a, 5);  // initially 5 elements
for (i = 0; i < 100; i++)
insertArray(a, i);  // automatically resizes as necessary
printf("%dn", a->array[9]);  // print 10th element
printf("%dn", a->used);  // print number of elements
freeArray(a);
return a;
}

最新更新