VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 696|回复: 2

▲究竟何时该释放内存

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2019-12-27 17:34:20 | 显示全部楼层 |阅读模式
#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;
}
回复

使用道具 举报

0

主题

22

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-1-3 10:30:02 | 显示全部楼层
tmp.recordKey = new char[tmp.keyLen];
改成tmp.recordKey = new char[tmp.keyLen+1];试试

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

使用道具 举报

0

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-3 14:27:01 | 显示全部楼层
我也觉得有道理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表