【问题标题】:C++ Pointer SnippetC++ 指针片段
【发布时间】:2009-02-15 02:17:41
【问题描述】:

大家好。这是我在 stackoverflow 上的第一个问题,所以请多多包涵。

这学期我的编程课是Java;上学期是 C++。我的 Java 老师觉得(我认为这是有道理的)我们学生理解内存管理的机制非常重要。

由于 Java 具有自动垃圾收集功能,他认为适合给我们一个作业,在该作业中,我们必须用 C++ 编写一个非常基本的程序,该程序使用指针创建一个二维数组。具体来说,我们首先要创建一个指针数组;第一个数组中的每个指针都应该引用它自己的整数数组。然后我们必须释放与这两个数组关联的内存。

这个赋值应该由两个函数组成:一个是分配二维数组,另一个是释放。我只是想在继续之前确保以下代码在逻辑上是合理的。

我确信这一切看起来都很简单,但问题是我的 C++ 老师花了整整两天时间在指针上。虽然我有点了解机制,但我对实施一无所知。话虽如此,以下是一个非常艰难的开始。这在逻辑上合理吗?我完全偏离标准了吗?提前向我表示最深切的感谢。

编辑:我用更新的代码创建了一个新问题。您可以点击Here查看。

【问题讨论】:

  • 我想你可以通过在refactormycode.com上发布这个来获得一些好的结果
  • 啊,非常感谢。我一直在寻找像这个这样的新网站。

标签: c++ pointers


【解决方案1】:

当你使用时

int* i = new int;

你和它配对

delete i;

当你使用

int* i = new int [12];

你和它配对

delete [] i;

如果new里面有括号,delete里面应该也有括号。否则,你的程序在我看来是合理的,只是你没有实现你的教授希望你实现的那两个功能。

【讨论】:

  • 非常感谢您的解释。我不想开始编写函数,直到我确定我可以......编写它们:D
【解决方案2】:

在我看来是正确的,但有一个例外 - 当您删除数组时,您需要以下语法:

delete [] arrayName;

【讨论】:

  • 非常感谢您的帮助。我将进行更改并开始使用这些功能。再次感谢。
【解决方案3】:

这是一个很好的问题。

我不认为我会称它为“二维数组”:它是数组的数组,而不是二维数组。

我想我会调用我的索引 iiColumniRow 而不是 nCount(您的 nRowsnColumns 在逻辑上是 const 并用作栅栏/高水位线值,而您的 nCount 是循环索引)。

要获得奖励积分,请考虑如何测试您的解决方案。您可以运行它以查看它是否有故障......但反过来,即没有故障,并不能证明它是正确的。你在什么操作系统上运行它?如果您使用的是 Linux,那么值得进行的测试是使用 valgrind 运行您的代码(因为当您运行它时,valgrind 可以自动检测到许多可能滥用内存的方式)。

【讨论】:

    【解决方案4】:

    您需要使用delete [] 而不仅仅是delete

    【讨论】:

      【解决方案5】:

      看起来不错(逻辑上)。 顺便说一句 - 运行一个程序并让它失败是可以的。 :-)

      【讨论】:

      • 是的,只是我对指针的经验基本上为零。我知道这个网站有一段时间了,现在似乎是提出问题的最佳时机。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 2013-10-18
      • 2013-05-14
      • 1970-01-01
      相关资源
      最近更新 更多