使用malloc函数生成的数组超出了所需大小

使用malloc函数生成的数组超出了所需大小,c,arrays,malloc,C,Arrays,Malloc,我正在制作一个能够使用一些统计函数的程序。为此,我使用malloc作为要操作的样本数的数组,因为我希望它的大小基于用户的输入。这不是我第一次这样做,而且效果很好,但这次我无法根据需要设置大小,也找不到缺陷 下面是创建和打印数组的必要代码,跳过main(),因为它只运行函数 int *sample; int MakeSample() { int sampleSize; int valueN; printf("Enter size of your sample: ");

我正在制作一个能够使用一些统计函数的程序。为此,我使用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: %d\n", k, sample[k - 1]);
    }
}

sample
是一个int指针
sizeof(示例)
始终为8。您需要将
sampleSize
变量存储在某个地方,并使用它-因为它不是真正的“数组”,它是一个指向内存的指针,正好包含一个数组。

也许您应该尝试在函数中打印数组,以便使用sampleSize。在main函数中,只需调用该函数。好主意,但是程序应该通过单独的方式执行所有操作,包括打印数组。sampleSize也有助于未来的操作,比如平均值除以另一个值,如果我将其全球化呢?我可以在这里解决这个问题并保留两个函数。全局变量在函数外声明,您可以尝试将两个函数合并为一个。好的,谢谢您的帮助。除息的
Value #1: 1
Value #2: 0
Value #3: 0
Value #4: 0
Value #5: 0
Value #6: 0
Value #7: 133057
Value #8: 0