gpt4 book ai didi

Calloc() 不分配零

转载 作者:行者123 更新时间:2023-11-30 20:50:34 29 4
gpt4 key购买 nike

我想创建一个封装动态分配数组的结构。它看起来像这样:

typedef struct IntArray {
int *field;
size_t length;
} IntArray;

然后,我有一个创建这样一个 IntArray 结构的函数:

IntArray *createIntArray(size_t length) {
IntArray *output;

if ((output = malloc(sizeof(IntArray))) == NULL) {
return NULL;
}

output->field = calloc(length, sizeof(int));
output->length = length;

return output;
}

主要内容如下:

int main() {
size_t size = 10;
IntArray *test = createIntArray(size);

for (int i = 0; i < size; i++) {
printf("%d\n", test[i]);
}
}
<小时/>

我希望 calloc() 用零初始化内存,但是输出很奇怪:

screenshot

<小时/>

我认为这些数字是内存地址,但它们来自哪里?每次我启动程序时,数字都会发生变化,但保持在 1. 和 6. 位置..

为什么会发生这种情况?

编辑:

我在stackoverflow上不小心混淆了calloc和malloc,问题实际上发生在上面的代码

最佳答案

您正在尝试将结构打印为 int。如果您打开/打开编译器警告(如果您使用 gcc,则为 -Wall),一个好的编译器会向您发出警告。

CreateIntArray 创建一个 IntArray,其中 field 的大小为 length。如果您想打印分配的 int 数组,您可以使用以下命令:

int main() {
size_t size = 10;
IntArray *test = createIntArray(size);

for (int i = 0; i < size; i++) {
printf("%d\n", test->field[i]);
}
}

关于Calloc() 不分配零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43780743/

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