基于this post我试图做一个动态数组,但不是int
数组,而是在程序中设计的struct
数组。
我不能让它工作,我想知道我的错误在哪里(主要是因为使用指针)
任何帮助都将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
//////////////////////////////////////
typedef struct {
int group[8];
uint64_t points;
} BestGroup;
//////////////////////////////////////
typedef struct {
BestGroup *array;
size_t used;
size_t size;
} Array;
void initArray(Array *a, size_t initialSize) {
a->array = (BestGroup *)malloc(initialSize * sizeof(BestGroup));
a->used = 0;
a->size = initialSize;
}
void insertArray(Array *a, int group_add, uint64_t points_add) {
// 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 = (BestGroup *)realloc(a->array, a->size * sizeof(BestGroup));
}
int i;
for (i = 0; i < 8; i++)
{
a->array[a->used][i].group[i] = group_add;
}
a->array[a->used].points = points_add;
a->used++;
}
void freeArray(Array *a) {
free(a->array);
a->array = NULL;
a->used = a->size = 0;
}
///////////////////////////////////////////////////////////////////////////////
int main()
{
Array a;
int i;
int list[8] = {0, 1, 2, 2, 4, 5, 6, 7};
initArray(&a, 5); // initially 5 elements
for (i = 0; i < 100; i++)
insertArray(&a, list, i); // automatically resizes as necessary
printf("%d\n", a.array.group[1]); // print 2nd element
printf("%lu\n", a.used); // print number of elements
freeArray(&a);
}
答案 0 :(得分:2)
有3个拼写错误:
void insertArray(Array *a, int group_add, uint64_t points_add)
应该是
void insertArray(Array *a, int *group_add, uint64_t points_add)
您想要添加元素数组,因此您必须为函数指定元素。
你编写这个部分时编写了这个部分来补偿编译时错误,因为第一个拼写错误:
a->array[a->used][i].group[i] = group_add[i];
或(您的第二个版本):
a->array[a->used][i].group[i] = group_add;
应该是
a->array[a->used].group[i] = group_add[i];
a->array[a->used]
已经是结构体的一个对象,无需再次取消引用它。
最后但并非最不重要
printf("%d\n", a.array.group[1]);
应该是
printf("%d\n", a.array->group[1]);
a.array
是一个数组,因此要获得第一个元素,您可以执行a.array->group...
或a.array[0].group...