首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

▲究竟何时该释放内存解决思路

2012-02-06 
▲究竟何时该释放内存#includevector#includealgorithm#includeiostreamusingnamespacestdtypedefst

▲究竟何时该释放内存
#include   <vector>
#include   <algorithm>
#include   <iostream>

using   namespace   std;

typedef   struct    
{
                int   keyLen;          
                char   *recordKey;    
}keyElement;

void   allc(vector <keyElement>   &idx)
{
                string   names[]   =   { "jack ",   "mike "};

                for(int   i   =   0;   i   <2;   i++)
                {
                                keyElement   tmp;
                                tmp.keyLen   =   names[i].length();
                                tmp.recordKey   =   new   char[tmp.keyLen];
                                strcpy(tmp.recordKey,   (const   char   *)names[i].c_str());                              
                                idx.push_back(tmp);
                                //delete   []   tmp.recordKey;     //这里删除会出错:导致main中无法访问index中数据
                }
}


int   main()
{
                vector <keyElement>   index;

                allc(index);
                cout < <index[0].recordKey < < "   " < <index[1].recordKey < <endl;
                cout < <index.size() < <endl;

//                 delete   []   index[0].recordKey;       //这里删除为什么也会出错呢?
//                 delete   []   index[1].recordKey;
                return   0;
}

[解决办法]
tmp.recordKey = new char[tmp.keyLen];
改成tmp.recordKey = new char[tmp.keyLen+1];试试

string.length()没有计算 '\0 ',而strcpy拷贝了 '\0 '
recordKey长度超出new char[]的内存,delete[]失败

热点排行