【问题标题】:Array made with malloc function goes beyond desired size [duplicate]用 malloc 函数制作的数组超出了所需的大小[重复]
【发布时间】:2019-10-15 15:19:03
【问题描述】:

我正在制作一个能够使用一些统计功能的程序。为此,我使用 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]);
    }
}

如果我为数组输入大小 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

【问题讨论】:

  • 也许你应该尝试在你的函数中打印数组,这样你就可以使用你的 sampleSize。在主函数中,调用函数即可。
  • 好主意,但程序应该单独执行所有操作,包括打印数组。 sampleSize 还可以帮助未来的操作,比如它除以另一个值的平均值,如果我把它设为全局怎么办?我可以在这里解决问题并保留这两个功能。
  • 全局变量声明在函数外,可以尝试将两个函数合并为一个。
  • 好的,感谢您的帮助。 XD

标签: c arrays malloc


【解决方案1】:

sample 是一个 int 指针; sizeof(sample) 始终为 8。您需要将 sampleSize 变量存储在某处并改用它 - there's no way for your program to know how big your array is otherwise, 因为它不是真正的“数组”,它是一个指向内存的指针,恰好包含一个数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2014-03-13
    • 1970-01-01
    • 2016-05-07
    • 2021-01-26
    相关资源
    最近更新 更多