阅读:1709回复:12
问一个C++的简单问题
请问
char a[5] 与 new a=char[5] 有什么区别~~~ |
|
|
沙发#
发布于:2004-09-22 19:07
一个静态分配内存,一个动态分配内存。
|
|
|
板凳#
发布于:2004-09-22 19:25
应该是 a=new char[5]吧。否则编译要出错的,没有这样的语法。
|
|
|
地板#
发布于:2004-09-23 10:17
请问 char a[5];//(1) //////////// char * a=new char[5];//(2) /////////////// 区别:(1)中a是具有5个char型元素的一维数组 (2)中a是指向一个大小为5*sizeof(char)内存的char型指针 |
|
地下室#
发布于:2004-09-23 10:43
还有最关键的一点是new分配的内存在用完之后需要delete,像
char * a=new char[5]; 用完后一定要 delete []a; :cool: |
|
|
5楼#
发布于:2004-09-23 19:13
不稳定
|
|
|
6楼#
发布于:2004-09-24 11:05
同一楼上的说法
|
|
7楼#
发布于:2004-09-25 14:14
char a[5] 在栈中分配内存
new char[5] 在堆中分配内存,容易造成碎片。 |
|
8楼#
发布于:2004-09-26 18:02
char a[5] 在栈中分配内存 各自有什么优缺点呢? 不然我们为什么不只用第一种呢? |
|
|
9楼#
发布于:2004-09-27 16:08
[quote]char a[5] 在栈中分配内存 各自有什么优缺点呢? 不然我们为什么不只用第一种呢? [/quote] 各自有什么优缺点呢? 不然我们为什么不只用第一种呢? :) |
|
|
10楼#
发布于:2004-09-27 17:15
[quote]char a[5] 在栈中分配内存 各自有什么优缺点呢? 不然我们为什么不只用第一种呢? [/quote] 首先,你得知道堆和栈的区别。 栈是由编译器管理的内存空间,通常用于存放临时变量和参数传递。 她的分配和回收由编译器完成。遵循后分配,先释放的原则。 堆是由程序自身(程序员)管理的空间。你可以进行分配,但你也要负责释放,否则,会出现内存泄漏,可用内存会变少。 通常,栈空间使用较为方便,但大小是有限制的。尤其当你写DLL的时候,它的栈空间使用的是调用方的栈空间。 所以建议:小的临时变量尽量使用栈空间,大量空间(几兆),且不经常重复分配的,使用堆空间。使用new和delete尽量把new放在构造函数中,delete放在析构函数中。 |
|
|
11楼#
发布于:2004-09-29 19:38
简单的说就是用new申请的需要用delete删除
而直接定义的不用 |
|
12楼#
发布于:2004-09-30 10:12
[quote][quote]char a[5] 在栈中分配内存 各自有什么优缺点呢? 不然我们为什么不只用第一种呢? [/quote] 首先,你得知道堆和栈的区别。 栈是由编译器管理的内存空间,通常用于存放临时变量和参数传递。 她的分配和回收由编译器完成。遵循后分配,先释放的原则。 堆是由程序自身(程序员)管理的空间。你可以进行分配,但你也要负责释放,否则,会出现内存泄漏,可用内存会变少。 通常,栈空间使用较为方便,但大小是有限制的。尤其当你写DLL的时候,它的栈空间使用的是调用方的栈空间。 所以建议:小的临时变量尽量使用栈空间,大量空间(几兆),且不经常重复分配的,使用堆空间。使用new和delete尽量把new放在构造函数中,delete放在析构函数中。 [/quote] 谢谢大家,bow~~~~~~~~~~~~~ |
|
|