【问题标题】:Use a variable in the main function to define the size of an array via malloc outside main? [closed]在 main 函数中使用变量通过 main 之外的 malloc 定义数组的大小? [关闭]
【发布时间】:2020-01-30 21:38:50
【问题描述】:

因此,作为初学者,指针是我新宣布的宿敌,但不幸的是,我觉得我必须将它们用于这项任务。

用户必须通过一个简单的scanf函数在main函数中定义数组的长度(该函数用于检查输入值的区间是否有效):

arraylength = input();

然后我用另一个先前声明的数组指针初始化数组,使用数组长度作为参数:

int *array = init_array (arraylength);

int* init_array(int arraylength)
{
    int *array = (int*) malloc ((arraylength) * (sizeof (int));

    return array;
}

我收到错误消息,并且我知道我以错误的方式使用 malloc。 但我很困惑,因为我找不到错误。语法对我来说很合适(那么我又是一个初学者)

我认为这要么与我如何错误地使用指针以及int arraylengthint *array 的数据类型有关。 使用数据类型(将它们从指针更改为普通整数,反之亦然)只会随后产生更多警告和错误。

我们不允许使用任何 const 变量。 每个变量都必须在函数中声明。

【问题讨论】:

  • “我收到错误消息”。这应该很明显,但您应该提供确切的错误消息 - 编辑您的问题并将其直接粘贴。另外,请提供minimal verifiable example

标签: c arrays pointers malloc


【解决方案1】:

如果这是同样的错误,你忘了在 malloc 的末尾加括号

// This
int *array = (int*) malloc ((arraylength) * (sizeof (int)));
// Not this
int *array = (int*) malloc ((arraylength) * (sizeof (int));

另外你不需要在malloc中进行类型转换(int*),除非你使用的是c++,只是没有理由的额外代码,

int *array = malloc ((arraylength) * (sizeof (int)));

这样就好了

【讨论】:

  • 或者去掉多余的括号!
  • @M.M 也是的
  • 谢谢。我现在正在尝试!
  • @MarinaS。没问题,告诉我它是否有效,否则我可以再次提供帮助!
  • Malloc 工作(不再有与之相关的警告)但现在我遇到了与 return *array 相关的其他问题
【解决方案2】:

使用正确的类型。最好sizeof 对象而不是类型。

void *init_array(const size_t arraylength)
{
    int *array = malloc (arraylength * sizeof (*array));
    return array;
}

【讨论】:

    猜你喜欢
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2014-12-04
    相关资源
    最近更新 更多