gpt4 book ai didi

c - 如何在 C 中检查我的动态数组是否为空

转载 作者:行者123 更新时间:2023-11-30 19:40:09 25 4
gpt4 key购买 nike

我有一个像这样的动态数组:

typedef struct
{
int *array;
size_t used;
size_t size;
} Vector;

我需要检查它是否为空。起初,我想,如果我没有发起它,那么大小应该= 0,但看起来它是一个随机数。当我启动它时,所有启动数组都 = 0,但是,这并不意味着它是空的,因为它已经启动了...有什么想法我应该做什么吗?

这也是我的启动函数:

int createVector(Vector *v, size_t initialSize)
{
if (v->size != 0)
return 0;
else
{
int i;
v->array = (int*)malloc(initialSize * sizeof(int));
v->used = 0;
v->size = initialSize;
return 1;
}
}

最佳答案

您必须先初始化Vector 变量,然后才能使用它。您不能假设它是自动初始化的,您必须显式地进行初始化。

当它没有元素时,您应该将其 sizeused 字段设置为 0,并将其 array 字段设置为 NULL.

如果你想让createVector()执行初始化,那么你不能对Vector的当前状态做任何假设,只需无条件初始化它,并希望用户永远不会传入其中已包含元素的初始化 Vector:

int createVector(Vector *v, size_t initialSize)
{
v->array = NULL;
v->used = 0;
v->size = 0;

if (initialSize > 0)
{
v->array = (int*) malloc(initialSize * sizeof(int));
if (!v->array)
return 0;
v->size = initialSize;
}

return 1;
}

Vector v;
int i = createVector(&v, 10);

另一方面,如果您希望 createVector() 忽略其中包含元素的 Vector,则必须事先对其进行初始化,使其具有有效状态您可以检查:

void initVector(Vector *v)
{
v->array = NULL;
v->used = 0;
v->size = 0;
}

int createVector(Vector *v, size_t initialSize)
{
if ((v->array) || (v->size != 0))
return 0;

v->used = 0;

if (initialSize > 0)
{
v->array = (int*) malloc(initialSize * sizeof(int));
if (!v->array)
return 0;
v->size = initialSize;
}

return 1;
}

Vector v;
int i;

initVector(&v);
i = createVector(&v, 10); // OK
i = createVector(&v, 20); // error, already created

关于c - 如何在 C 中检查我的动态数组是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35756336/

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