gpt4 book ai didi

c++ - 关于 Struct 上的 new 和 delete 运算符

转载 作者:行者123 更新时间:2023-11-28 02:48:41 24 4
gpt4 key购买 nike

我有一个结构

#ifndef EVENT_H
#define EVENT_H
struct Event {
int ID;
int num;
int * energies;
};
#endif

和一个与事件结构一起工作的函数,

#include <fstream>
#include "Event.h"
#include <iostream>
using namespace std;
Event * read(std::ifstream& os, Event * ev)
{
if(os.fail()) return NULL;
os >> ev->ID >> ev->num;
ev->energies = new int[ev->num];
if(ev->ID!=0 && ev->num!=0){
for (int i = 0; i < ev->num; ++i)
{
os >> * (ev->energies+i);
}
}
return ev;
}

这是main.cpp

#include <iostream>
#include <fstream>
#include "Event.h"
using namespace std;
Event * read(ifstream& os, Event * ev);
void dump(const Event& ev);
void clear(Event * ev);

int main(int argc, char const *argv[])
{
ifstream os(argv[1]);
Event * ev = new Event;
cout << "Created " << ev << endl;
Event * pointer=read(os, ev);

while(pointer!=NULL)
{
dump(*ev);
clear(ev);
Event * ev = new Event;
pointer = read(os,ev);
}
return 0;
}

我的问题是:在这种情况下,为什么不是每次都释放内存(使用 ev->energies = new int[ev->num]; 在 read() 中分配)结束调用 read() 函数?

最佳答案

不,内存没有被释放。在函数的最后,你需要调用

delete [] ev->energies

关于c++ - 关于 Struct 上的 new 和 delete 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23548464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com