我是初学者,所以请在这个问题上放我一马。因此,我在头文件中有两个函数和一个结构体,我目前正在使用。
结构体:
typedef struct ArrayList
{
// We will store an array of strings (i.e., an array of char arrays)
char **array;
// Size of list (i.e., number of elements that have been added to the array)
int size;
// Length of the array (i.e., the array's current maximum capacity)
int capacity;
} ArrayList;
这是第一个函数,它为字符串数组创建并动态分配内存。Capacity是内部数组的长度,size是当前大小(数组中有多少个字符串,本质上是0)
ArrayList *createArrayList(int length){
char **array = NULL;
ArrayList *n;
int size = 0;
if (length > DEFAULT_INIT_LEN)
{
array = malloc(sizeof(int) * length);
n->capacity = length;
}
else
{
array = malloc(sizeof(int) * DEFAULT_INIT_LEN);
n->capacity = DEFAULT_INIT_LEN;
}
if (array == NULL)
panic("ERROR: out of memory in Mylist!n");
n->size = size;
printf("-> Created new ArrayList of size %dn", n->capacity);
return *array;
当我试图在同一个文件中的另一个函数中实现指向ArrayList结构体的capacity成员的指针时,它没有初始化,而不是设置为前一个函数的值。例如,在createArrayList中,n->容量等于10,但在printArrayList中使用时,它是未初始化的,并且出现一个随机数,例如122843753。
void printArrayList(ArrayList *list)
{
printf("n%d", list->capacity);
return NULL;
}
我的问题是,我如何才能使所有这些函数在引用结构成员时"共享"相同的值。也就是说,第一个函数打印->创建了一个大小为10的新数组列表,第二个函数也打印10。而且,我必须在不改变struct函数本身的情况下这样做。抱歉,如果这是一个措辞不好的问题,但我可以进一步澄清,如果它令人困惑。提前感谢!
我看到这段代码的几个主要问题,在createArrayList
中,您将返回array
,这是char **
,但您应该返回ArrayList *
,这是n
。因此,看起来您想将array
分配给n->array
。下一个问题是n
是ArrayList *
,但您不为n
分配内存。