读书人

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

发布时间: 2012-02-06 15:52:45 作者: rapoo

▲究竟何时该释放内存
#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[]失败

读书人网 >C++

热点推荐