注册 登录
编程论坛 C++教室

关于delete释放空间报错的问题

w470913537k 发布于 2013-04-09 20:08, 668 次点击
#include <iostream>
#include <vector>

using namespace std;

int main ()
{
    vector<int> number;
    int n;
    while (cin>>n)
    {
        number.push_back(n);
    }
    int *temp=0;
    temp=new int(number.size(),'0');
    size_t i=0;
    for (vector<int>::iterator j=number.begin(); j!=number.end(); j++)
    {
        temp[i]=*j;
        i++;
    }
    for (i=0; i<number.size(); i++)
    {
        cout<<temp[i]<<"\t";
    }
    cout<<endl;
    delete []temp;
    temp=0;
    return 0;
}


这是我写的一段小程序。delete释放空间在运行的时候总是报错。。语法也没有错误,我百度以后也没找到错误的原因。。求各位大神给个答复,谢谢了        
6 回复
#2
w470913537k2013-04-09 20:10
temp=new int[number.size()]
如果我把开辟动态数组改成这样的,就不会出问题。。这是为什么呢。。
开辟动态数组不可以按照我写的程序那样来吗
#3
peach54602013-04-09 20:20
temp=new int(number.size(),'0');
你到底是要int还是int[]
#4
fanpengpeng2013-04-09 20:30
temp=new int(number.size(),'0');

这是要干嘛 int类型哪有这么强大的初始化式 你说语法没有错误 你是不是该考虑换个编译器了
还是老老实实的 这样吧 然后在一个一个初始化 用数组 没办法
temp = new int[number.size()];

要么就用容器 好好的换数组干嘛 迭代器不也能下标操作吗
vector<int>::iterator p = number.begin();

*p; *(p+i); p[i]; 都可以啊
或者 你是在最求什么卓越的性能
#5
w470913537k2013-04-09 21:20
回复 4楼 fanpengpeng
呃。。。我只是想要进行初始化。。。
new int(number.size(),'0');
就是开辟一个数组,将其中所有的值初始化为0.
#6
fanpengpeng2013-04-09 21:36
你的这个是容器的初始化式 他是复合类型 可以支持比较复杂的初始化式
int是内置类型 没有高级的初始化式 至多 int(i)这样的
对于动态分配的数组的初始化 有种说法是可以进行值初始化
temp = new int[number.size()]();

但是 貌似我这边不行 还是一对随机数 据说有的编译器是可以的
只能解释到这里了 我是新手
#7
w470913537k2013-04-09 21:42
回复 6楼 fanpengpeng
THANK YOU啦。。
搞懂了。。。C++好难学啊。。。看书看一看就忘了以前的了。。
1