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