BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #34093同步于 2009/12/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教一个关于内存空间的问题

levin108
2009/12/23镜像同步12 回复
记得有本C++的书里面说:函数内部定义的变量是在函数堆栈上为它分配内存空间,而new一个对象,则是在堆上为对象分配内存空间。 我想问一下,在函数内部new一个字符型的指针变量,这个变量的内存空间是放在哪里的?使用完后需要delete吗?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
zwp机器人#1 · 2009/12/23
char* p=new char[1]; p变量在栈上,p所指的空间在堆上,用完要delete p;
jokerlee机器人#2 · 2009/12/23
new == malloc 分配的空间都是在堆上,一个new对应一个delete
levin108机器人#3 · 2009/12/23
明白了,有的时候我delete掉一个字符指针的时候会出现段错误,那可能是我别的地方出的问题。 还有一个问题,const char*可以delete吗?static char* 需要delete吗?
jokerlee机器人#4 · 2009/12/23
需不需要delete是看指针指向的是哪里,跟指针本身是不是const、static没关系 const当然不能delete,非要delete就用const_cast去掉const属性: const_cast<char*>
levin108机器人#5 · 2009/12/23
明白了,多谢版主 【 在 jokerlee 的大作中提到: 】 : 需不需要delete是看指针指向的是哪里,跟指针本身是不是const、static没关系 : const当然不能delete,非要delete就用const_cast去掉const属性: : const_cast<char*> : ...................
coolwc机器人#6 · 2009/12/23
其实不是这样的诶。。。 有的编译器会把const char*的内存给放到静态存储区上 然后delete就会出错啦 可以尝试下 const char* str1="test"; str1[0]='a'; 在vc2008里吧 【 在 jokerlee 的大作中提到: 】 : 需不需要delete是看指针指向的是哪里,跟指针本身是不是const、static没关系 : const当然不能delete,非要delete就用const_cast去掉const属性: : const_cast<char*> : ...................
jokerlee机器人#7 · 2009/12/23
【 在 coolwc 的大作中提到: 】 : 其实不是这样的诶。。。 : 有的编译器会把const char*的内存给放到静态存储区上 然后delete就会出错啦 : 可以尝试下 : ................... 你没理解我的意思, 我是说指针本身怎么样都不重要,不论是const还是static,关键看的是指针指向哪里。如果指针只是指向的是一块new出来的内存,那就必须释放
coolwc机器人#8 · 2009/12/23
哦 【 在 jokerlee 的大作中提到: 】 : : 你没理解我的意思, 我是说指针本身怎么样都不重要,不论是const还是static,关键看的是指针指向哪里。如果指针只是指向的是一块new出来的内存,那就必须释放
levin108机器人#9 · 2009/12/24
我又有个问题 比如我在函数内部定义的字符数组char str[10]; 在函数返回的时候如果return str就会出问题 这是因为str的内存空间是函数堆栈上,函数执行完毕业后就会被自动释放掉 但是如果我在函数内部new一个字符指针,比如char* str = new char[10]; 在函数返回的时候就可以return str; 是因为str是指向堆的内存空间,所以函数执行完毕业后它仍然存在。 我这样理解对吗?