+ -
当前位置:首页 → 问答吧 → 这段代码有什么错误?

这段代码有什么错误?

时间:2011-11-29

来源:互联网

C/C++ code
    char cstr[25];
    _itoa(amount,cstr,10);
    string str = cstr;
    delete cstr;



这段代码有什么错误?

作者: liulcsy   发布时间: 2011-11-29

delete cstr;

cstr在栈上,delete出错

作者: namelij   发布时间: 2011-11-29

这个不能delete的

作者: mougaidong   发布时间: 2011-11-29

我可以教你玩儿的更奔放点

C/C++ code
#include <iostream>
#include <string>

int main(void)
{
    int amount = 123457;
    std::string str(24, '\0');
    _itoa_s(amount, (char*)str.data(), 24, 10);
    std::cout << str << std::endl;
}

作者: mougaidong   发布时间: 2011-11-29

cstr没有使用new操作符分配,所以不需要用delete
引用楼主 liulcsy 的回复:
C/C++ code
char cstr[25];
_itoa(amount,cstr,10);
string str = cstr;
delete cstr;



这段代码有什么错误?

作者: lifesider   发布时间: 2011-11-29

cstr的内存是在栈上自动分配的,不是在堆上动态分配的,所以不能用delete来释放,当函数结束时自动释放。

作者: farmliver   发布时间: 2011-11-29

new---// bulid heap
delete --- // delete heap

your 'cstr' is stack,not heap!

作者: dw903632958   发布时间: 2011-11-29

程序员需要对申请的内存负责,new和delete成对出现,new了就需要delete

如果没有delete,程序退出,内存释放,因为,内存是分配在进程的虚拟地址空间里面的,程序退出,整个进程空间的内存全部回收

不用delete释放new申请的空间,在C中叫内存泄露。这个内存程序结束时也不释放,重启电脑才释放。

作者: xuanxuan683   发布时间: 2011-11-29

引用 1 楼 namelij 的回复:
delete cstr;

cstr在栈上,delete出错


会出什么错?

作者: liulcsy   发布时间: 2011-11-29

应该是说delete 不能删除heap上的内存之类的吧!!

作者: kingstar158   发布时间: 2011-11-29

栈上分配的空间由系统自动释放,只有堆上分配的空间才可以delete释放

作者: wumuzi520   发布时间: 2011-11-29