【发布时间】:2014-12-22 21:05:34
【问题描述】:
在我的程序中,calloc() 不适用于超过 38 的大小,但如果小于这个数字,它就可以完美运行。在这种情况下,我想分配int中的128个,然后释放它。
怎么了?
#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;
}
【问题讨论】:
-
printf("Value of y[%d] = %d\n", i, *y );*y未初始化。 -
如果
n = 512 / sizeof(int)那么malloc(512/sizeof(int))是错误的,它必须是malloc(512)。 -
请描述您遇到的错误。还可以考虑从您的示例中删除不相关的代码。我敢打赌,这样做的时候,问题就会消失。
-
calloc doesn't work没什么好说的了。 -
@user3386109:
sizeof(int)通常为 4(CHAR_BIT通常为 8),即使在 64 位系统上也是如此。可以有一个 ILP64 系统(其中int、long和指针是 64 位),但 Unix 上的事实标准是 LP64(long和指针是 64 位),而它是 LLP64 (long long和指针是 64 位)适用于 Windows 64 位。
标签: c memory size allocation calloc