【问题标题】:Pointers in C using Malloc to allocate an array?C中的指针使用Malloc分配数组?
【发布时间】:2017-02-11 05:21:43
【问题描述】:

我在这个练习中遇到了一些问题。该程序的工作方式是用户输入数据集的数量,因此假设为 3。然后用户输入浮点数,然后输入浮点数,然后按 Enter 键输入第二个和第三个数据集。所以一个示例输入是。

输入数据集的数量:3
3 12.5 3.4 6.7
5 7.7 5.5 8.8 3.3 5.7
2 89.3 84.5

之后,用户选择要对数据 2 执行操作的数据,即 [5 7.7 5.5 8.8 3.3 5.7] 然后返回数字的最大值。

由于我们不知道数据集的数量,我们必须使用我在代码中所做的动态分配数组,并让指针指向该数组以找到该特定数据集的最大值。我想我需要两个数组,一个来跟踪数据,一个来跟踪集合。这是我的代码。

我在gettingData 方法中遇到问题,我希望输入用户输入 在那个数组中,但是当我打印指针指向的内容时,它返回 0.0000,这是不准确的。

【问题讨论】:

  • 请发送您用来测试的代码,或者我们可以做些什么。查看如何在标准 StackOverflow 文档页面中提出问题。不做可能会触发“不是编程问题”标志,您的问题将被关闭。

标签: c arrays pointers


【解决方案1】:

您似乎忘记了一件事:在您尝试读取代码中的任何 变量之前,必须对其进行初始化。一般来说,初始化可以通过两种指令来实现:

  • 赋值指令,即a = expression。注意,为了给a赋值,你必须先获得expression的值,所以expression中使用的任何变量都必须先初始化。
  • 将变量的地址 (&a) 传递给函数,该函数将值置于给定地址下(通过写入*a = expr 来完成)。和以前一样,expr 不能使用任何未初始化的变量。

更重要的是,您的程序似乎没有从输入中读取浮点数的任何指令。

更重要的是,当您处理完数据后,请记住free 分配的malloc 内存!如果您对原因感兴趣,请阅读this thread.

正如@Aubin 所说,您向gettingData 函数传递的参数不足。

重要提示:在使用好的编译器(例如gccclang)时,使用-Wall 标志总是一个好主意,它可以发现像这样的简单错误,并且甚至在您有机会运行代码之前就发出警告。像这样的错误,程序员一辈子都在犯,-Wallflag 每天为全人类节省大量时间。

【讨论】:

    【解决方案2】:

    我认为我们不应该在这里为您编码,但我可以为您共享的代码提供一些建议(问题太多)。

    • 您的主目录中似乎有一个未使用的变量 dataSetSizes 函数(但正在打印)
    • 如果您正在使用 malloc,您应该释放这些分配的内存。 请参阅 free() 函数。
    • 您可能希望最终使用 %f 而不是 %d,因为您将使用浮点值。
    • 如果你要定义一个带有三个参数的函数 只用两个?
    • 等等……

    在逻辑清晰之前避免编写任何代码是一个很好的做法。流程图、序列图或任何 UML 文档可能会有所帮助。我们的想法是花时间思考实现目标的最有效方法,因此,编码可能是简单的部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2011-02-19
      • 2021-12-25
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多