gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:43:05 30 4
gpt4 key购买 nike

我正在尝试使用此线程 C dynamically growing array 上建议的代码来实现动态数组。我想从函数返回 struct Array,但在 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("%d\n", a.array[9]); // print 10th element
printf("%d\n", 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("%d\n", a->array[9]); // print 10th element
printf("%d\n", a->used); // print number of elements
freeArray(a);
return a;
}

关于c - 处理错误 - C 中结构之前的预期表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45523755/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com