墨酱 2022-05-17 10:25 采纳率: 0%
浏览 50

一个类,需要复制,但是在复制函数里因为有new的存在,使得进程内存一直增大,不知道怎么delete这个东西?

一个类,需要复制,但是在复制函数里因为有new的存在,使得进程内存一直增大,不知道怎么delete这个东西?

void CTrack::copyctrack(CTrack* source_track)
{

Num_Point3DObject = source_track->Num_Point3DObject;
Distance = source_track->Distance;
ptrTrack = new CTrackNode;
ptrTrack->ptrNext = NULL;
CTrackNode* ptr1 = ptrTrack;
CTrackNode* ptr2 = source_track->ptrTrack;
while (ptr2->ptrNext != NULL)
{

    ptr1->Point = ptr2->Point;
    ptr1->ptrNext = new CTrackNode();//感觉就是这块new的内存没有删除,所以内存一直增加
    ptr1 = ptr1->ptrNext;
    ptr1->ptrNext = NULL;
    ptr2 = ptr2->ptrNext;

}
ptr1->Point.CopyCPoint3D(global_Mission.Terminal);
ptr1->ptrNext = NULL;
}
  • 写回答

4条回答 默认 最新

  • 墨酱 2022-05-17 10:34
    关注

    CTracknode 是一个类,内容如下:
    class CTrackNode
    {
    public:
    CTrackNode(void);
    void Set_RandomTrackNode_IN_SPACE(CSpace globalSpace);
    void Link2Next(CTrackNode* ptr);
    void delete_track();
    public:
    CPoint3D Point;//Point是一个点,包含xyz的坐标;
    CTrackNode* ptrNext;
    };
    CTrack也是一个类:
    class CTrack
    {
    public:
    CTrack(void);
    ~CTrack(void);
    void CreateTrack(void);// CreateTrack at random
    void _Debug_ShowMe(void);
    double get_length(CTrackNode* p, CTrackNode* n, CSpace m);
    void GetTrackDistance(void);
    void copyctrack(CTrack* source_track);

    public:
    CTrackNode* ptrTrack;
    int Num_Point3DObject;
    double Distance;
    }
    复制函数的目的是为了将一条ctrack的内容复制过去,但是地址不同。
    因为主函数里,有一个for循环,循环里有在调用这个函数,而且进程内存2.2G耗尽停止也是在new的那个地方报错,所以感觉应该是new完,没有delete掉。但是,这个ctracknode在new完后进行了循环,就算最后delete掉它,他申请的内存依然没有被delete掉。

    评论 编辑记录

报告相同问题?

问题事件

  • 请提交代码 5月17日
  • 创建了问题 5月17日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价