处理错误 - C语言中struct之前的预期表达式

时间:2017-08-05 15:50:05

标签: c

我正在尝试使用此线程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;
}

1 个答案:

答案 0 :(得分:0)

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

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;
}