我正在制作一个能够使用一些统计函数的程序。为此,我将malloc用于要操作的样本编号的数组,因为我希望它的大小基于用户的输入。这不是我第一次这样做,而且效果很好,但是这次我无法根据需要设置大小,也找不到缺陷。
下面是创建和打印数组的必要代码,跳过main((,因为它只运行函数。
int *sample;
int MakeSample()
{
int sampleSize;
int valueN;
printf("Enter size of your sample: ");
scanf("%d", &sampleSize);
sample = malloc(sampleSize * sizeof(int));
for (int i = 1; i <= sampleSize; i++)
{
printf("Enter value #%d: ", i);
scanf("%d", &valueN);
sample[i - 1] = valueN;
}
}
int PrintSample()
{
for (int k = 1; k <= sizeof(sample); k++)
{
printf("Value #%d: %dn", k, sample[k - 1]);
}
}
如果我为数组输入大小 1,那应该是要求和打印的金额值,相反,我得到了这个:
Value #1: 1
Value #2: 0
Value #3: 0
Value #4: 0
Value #5: 0
Value #6: 0
Value #7: 133057
Value #8: 0
sample
是一个整数指针;sizeof(sample)
始终为 8。您需要将sampleSize
变量存储在某个地方并改用它 - 否则您的程序无法知道数组有多大,因为它不是真正的"数组",它是指向内存的指针碰巧容纳数组。