问题描述
- 请教一个VC++指针的问题
-
我要定义数组的话
char ddd[100];
char *ddd=new char[100];
请问下这两种 方式 ,第一种是系统自动分配的空间是吧?第二种的话必须NEW了之后
才会分配是吧?意思是指针必须手动分配空间吗?请问下这个NEW是在哪里分配的空间呀
和普通的系统自动分配的空间有什么区别呢?
解决方案
第一个是在堆栈上分配的,第二个是在堆上分配的。
第一个在函数退出的时候自动清栈,后者要用delete删除,否则内存泄漏。
解决方案二:
最大的区别就是后者需要程序员调用delete []add; 操作释放已经申请的空间,而前者系统会自动释放。new操作分配的内存如果忘记释放非常
容易产生内存泄露。
解决方案三:
第一个是在栈里,第二个是在堆里,在栈里的出了函数就没有了,在堆里的只要不delete就一直还在。
解决方案四:
char odd[100]是定义时指定数组长度,所谓“静态存储分配”;new char [100],应该是动态分配空间,在堆内存(heap)。两者最大区别:前者元素必须常量,后者可以是变量。
解决方案五:
最好一个NEW对应一个delete不然程序大了,内存泄漏问题不好找,本人就有亲身经验T。T
解决方案六:
栈上分配和堆上分配空间。作用域不一样。
解决方案七:
char ddd[100]; 这个是自动分配的栈空间
char *ddd=new char[100]; 这个是手动分配的堆空间
解决方案八:
vc++实现的指针式时钟(赠送问题一个)
时间: 2024-11-02 17:03:17