设为首页 加入收藏

TOP

Visual C++初学者指针学习指南(六)
2012-11-04 14:11:58 来源: 作者: 【 】 浏览:1870
Tags:Visual 学者 指针 学习指南
  动态分配

  动态分配也许可以算是指针的关键技术了。它被用于在没有定义变量的情况下分配内存,然后由一个指针指向这段内存。虽然这个概念好像很让人糊涂,其实它很简单。以下的代码解说了如何为一个整数分配内存空间:

  int *pNumber;

  pNumber = new int;

  第一行代码声明了一个指针pNumber,第二行代码分配了一个整数的空间,并使pNumber指向这一段新分配的内存。下面是另外一个例子,这一次使用了一个double:

  double *pDouble;

  pDouble = new double;

  这些规则是相同的T,所以你应该可以很容易地掌握。

  动态分配和本地变量的不同点是:你分配的内存在函数返回和语句块结束的时候不会被释放,所以,如果你用动态分配来重新编写上面的代码,那么它就会正常工作了:

  #include

  int *pPointer;

  void SomeFunction()

  {

   // 使pPointer指向一个new的整数

   pPointer = new int;

   *pPointer = 25;

  }

  void main()
  {
   SomeFunction(); // 让pPointer指向某些东西
   printf("Value of *pPointer: %d\n", *pPointer);
  }


  请通读并编译以上的示例代码,并确信你已经弄懂了它为何如此工作。当调用SomeFunction的时候,它分配了一段内存,并使pPointer指向这段内存。这一次当函数返回的时候,这段new的内存就会完好保留,所以pPointer仍然指向某些有用的内容。这就是动态分配了!请确信你已经搞懂了这一点,然后继续阅读关于这段代码中的一个严重错误。

  来得明白,去得明白

  还有一个复杂的因素,并且是十分严重的——虽然它很好补救。问题是你分配的内存在离开的时候虽然仍然完好,但是这段内存永远也不会自动销毁。这就是说,如果你不通知电脑结束使用的话,这段内存就会一直存在下去,这样做的结果就是内存的浪费。最终,系统就会因为内存耗尽而崩溃。所以,这是相当重要的一个问题。当你使用完内存之后,释放它的代码非常简单:

  delete pPointer;

  这一切就这么简单。不管怎样,在你传递一个有效的指针——亦即一个指向一段你已经分配好的内存指针,而不是那些老旧的垃圾内存——的时候,你都需要无比细心。尝试delete一段已经释放的内存是十分危险的,这可能会导致你的程序崩溃。

  好了,下面又是那个例子,这一次它就不会浪费内存了:

  #include

  int *pPointer;

  void SomeFunction()

  {

   // 使pPointer指向一个new的整数

   pPointer = new int;

   *pPointer = 25;

  }

  void main()

  {

   SomeFunction(); // 让pPointer指向某些东西

   printf("Value of *pPointer: %d\n", *pPointer);

   delete pPointer;

  }

  唯一的一行不同也就是最本质的一点。如果你不将内存delete掉,你的程序就会得到一个“内存泄漏”。如果出现了内存泄漏,那么除非你关闭应用程序,否则你将无法重新使用这段泄漏的内存。

首页 上一页 3 4 5 6 7 8 9 下一页 尾页 6/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MFC程序员的WTL指南之工具条与状.. 下一篇使用VC++ ATL实现Office的COM插件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: