gpt4 book ai didi

calloc 不适用于大数字

转载 作者:行者123 更新时间:2023-11-30 18:40:01 28 4
gpt4 key购买 nike

在我的程序中,calloc() 不适用于超过 38 的大小,但小于此数字则可以完美运行。在本例中,我想分配 128 个 int,然后释放它。

怎么了?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int *a;
int *x;
x = malloc(512 / sizeof(int));
a = x;
int n = (512 / sizeof(int));
int i;
for (i = 0; i < n; i++)
{
printf("Address of x[%d] = %x\n", i, x );
printf("Value of x[%d] = %d\n", i, *x );
x++;
}
free(a);
int *y = (int *)malloc(512 / sizeof(int));
a = y;
for (i = 0; i < n; i++)
{
printf("Address of y[%d] = %x\n", i, y );
printf("Value of y[%d] = %d\n", i, *y );
y++;
*y = i + 1;
}
free(a);
int *z = (int *)calloc(38, sizeof(int));
a = z;
for (i = 0; i < 38; i++)
{
printf("Address of z[%d] = %x\n", i, z );
printf("Value of z[%d] = %d\n", i, *z );
z++;
}
free(a);
return 0;
}

最佳答案

第一个问题,您没有初始化 xy 的值,但仍然尝试打印它们,而另一个更重要的问题是:

n = 512/sizeof(int)

然后你malloc

x = malloc(512/sizeof(int))

你应该这样malloc

x = malloc(n*sizeof(int))

产生

x = malloc(512)

但是由于您想要分配128 of int,所以这样做更清楚

n = 128;
x = malloc(n * sizeof(int));

这是固定代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int *a;
int *x;
x = malloc (512);
a = x;
int n = (512/sizeof(int));
int i;
for (i = 0; i < n; i++)
{
*x = i; /* intialize the value of x[i] */
printf("Address of x[%d] = %p\n", i, x );
printf("Value of x[%d] = %d\n", i, *x );
x++;
}
free(a);

int *y = malloc(512);
a = y;
for (i = 0; i < n; i++)
{
*y = i+1; /* initialize the value of y[i] */
printf("Address of y[%d] = %p\n", i, y );
printf("Value of y[%d] = %d\n", i, *y );
/* *y = i+1; move this before the printf */
y++;
}
free(a);
int *z = calloc(38, sizeof(int));
a = z;
for (i = 0; i < 38; i++)
{
printf("Address of z[%d] = %p\n", i, z );
printf("Value of z[%d] = %d\n", i, *z );
z++;
}
free(a);
return 0;
}

您必须始终检查 malloc 的结果,失败时它会返回 NULL。如果它确实返回 NULL 并且您不进行检查,那么您将取消引用 NULL 指针,这不是一个好主意。

具有讽刺意味的是,代码中唯一真正正确的部分是 calloc 部分,除了不检查其返回值之外。

关于calloc 不适用于大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27610401/

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