gpt4 book ai didi

由结构 vector 引起的 C++ 内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 14:49:07 24 4
gpt4 key购买 nike

指示的行引起的内存泄漏。 “pendingSendReqs.push_back(&f);”在 sendreq() 方法中。我是 c++ 的新手,所以我似乎无法弄清楚为什么会发生内存泄漏。泄漏的内存大小为16字节。

class Station {
struct Frame {
enum { Token, Data, Ack } type; // type of frame
unsigned int src; // source id
unsigned int dst; // destination id
unsigned int prio; // priority
} frame;

unsigned int stnId;
static unsigned int requests; // total send requests (if needed)
void data( Frame frame ); // pass frame
void main(); // coroutine main
Station *nextStation;
vector<Frame*> pendingSendReqs;
public:
Station( unsigned int id ) : stnId(id) { }
~Station() {
for (int i = 0; i < pendingSendReqs.size(); i++) {
delete pendingSendReqs.at(i);
cout << "~: " << pendingSendReqs.at(i) << endl;
}
}
//unsigned int getId() { return stnId; }
void setup( Station *nexthop ) { // supply next hop
//*nexthop is the object
nextStation = nexthop;
//cout << "size: " << sizeof(*nexthop) << endl;
}
void sendreq( unsigned int round, unsigned int dst, unsigned int prio ) { // store send request
Frame f;
f.type = Frame::Data;
f.src = stnId;
f.dst = dst;
f.prio = prio;


pendingSendReqs.push_back(&f); //MEMORY LEAK CAUSED BY THIS LINE
}
void start(); // inject token and start
};

最佳答案

这不是内存泄漏

pendingSendReqs.push_back(&f); 

这是 future 未定义的行为。您正在存储局部变量的地址。任何在函数范围之外取消引用这些指针之一的尝试都是未定义的行为。

您必须问问自己是否真的需要一个指针 vector 。如果您不知道该问题的答案,那么您很可能不知道。

关于由结构 vector 引起的 C++ 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21392515/

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