2009-02-15 150 views
2

问候大家。这是我在stackoverflow的第一个问题,所以请耐心等待。C++指针代码片段

本学期我的程序设计类是Java;上个学期是C++。我的Java老师觉得(理所当然地认为),对于我们的学生来说,理解内存管理的机制非常重要。

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

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

我确定这一切似乎都很简单,但麻烦的是我的C++老师花了两天的时间在指针上。虽然我有点了解机制,但我很执着。这就是说,以下是一个非常粗糙的开始。这是逻辑上的声音?我完全不符合标准吗?我最深切的感谢您提供任何帮助。

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

+0

我想你可能会在http://refactormycode.com/上发表一些好的结果 – 2009-02-15 02:28:27

+0

啊,非常感谢。我一直在寻找像这样的新网站。 – ninj0rc 2009-02-15 03:17:24

回答

2

当您使用

int* i = new int; 

与其配对的

delete i; 

当您使用

int* i = new int [12]; 

delete [] i; 

配对如果有新的大括号中,应在删除括号。否则,你的程序对我来说看起来很合理,只是你没有实现你的教授想要你的那两个功能。

+0

非常感谢您的解释。我不想开始编写函数,直到我确信我可以......编写它们:D – ninj0rc 2009-02-15 02:27:19

2

相貌端正对我来说,有一个例外 - 当你删除你需要以下语法的数组:

delete [] arrayName; 
+0

非常感谢您的帮助。我会做出改变并开始研究这些功能。再次感谢。 – ninj0rc 2009-02-15 02:27:55

0

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

0

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

2

这是一个很好的问题。

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

我想我会打电话给我的指标iiColumniRow代替nCount(您nRowsnColumns在逻辑上是常量,用作栅栏柱/高水位标记值,而你的nCount是一个循环索引)。

对于奖励积分,考虑如何测试您的解决方案。你可以运行它来查看它是否有问题......但是相反的,即不是错误的,并不能证明它是正确的。你在运行什么操作系统?如果你使用的是Linux,那么一个有价值的测试是使用valgrind来运行你的代码(因为当你运行它时,valgrind可以自动检测到很多可能误用内存的方式)。