if(_stat != NULL)判断的时候,_stat始终为NULL,没有初始化成功
class GooseStatInfo {
private:
std::string _custom;
public:
void setCustom(const std::string& str) {
_custom = str;
//debug 编译到此处str为字符串,this 值为NULL
}
std::string getToString() {
Serial gs;
gs.update(_custom);
// ... other codes
}
};
class ABRInt {
private:
GooseStatInfo* _stat;
ABRInt(): _As(...), _bs(...) {}
ABRInt(const ABRInt& other) = delete;
ABRInt& operator=(const ABRInt& other) = delete;
~ABRInt() = default;
ABRInt(ABRConfig& config, GooseStatInfo* s) {
_stat = s;
// ... other codes
}
void onEvent(const std::shared_ptr<ABREvent>& event) {
std::string results = ABRCustC::getStatInfo();
//需要把results的结果发到_custom,ABRCustC::getStatInfo()返回的结果为str类型,做了c.str()处理
if(_stat != NULL){
_stat->setCustom(results);
//_stat初始化有点不对,这里_stat一直为NULL,没有初始化成功
}
// ... other codes
}
};
啥意思
参考ChatGPT
根据您提供的代码片段,无法确定_stat是何种类型的变量,它是在哪里声明的,以及为什么在if语句中判断失败。但是,从您提供的代码中可以看出,您的类中没有与_stat相关的任何代码。因此,我建议您检查代码中是否存在其他与_stat相关的变量或代码,并查看它们是否正确初始化。
此外,根据您的描述,如果在setCustom方法中,参数str的值正常,但是this指针的值为NULL,那么很可能是因为您没有正确初始化该对象。请确保在使用对象之前正确地创建并初始化它。
参考GPT的回答内容和自己的思路,在ABRInt类的构造函数中,可以通过成员初始化列表对指针变量_stat进行初始化,例如:
ABRInt(ABRConfig& config, GooseStatInfo* s): _stat(s) {
// ... other codes
}
这样,在对象构造时,_stat指针就会被初始化为传入的指针s的值,避免了未初始化的问题。
此外,建议在类的析构函数中,对成员变量_stat进行判断和释放,避免出现内存泄漏的情况,例如:
~ABRInt() {
if (_stat != nullptr) {
delete _stat;
_stat = nullptr;
}
}
这样,在对象被销毁时,如果_stat指针不为nullptr,则会被释放掉,避免内存泄漏。
回答不易,还请采纳!!!
你的代码中 _stat只在构造 ABRInt(ABRConfig& config, GooseStatInfo* s) 中赋值了,如果没有使用这个构造,那么 _stat始终没有赋值。
在代码中,没有明确地初始化 _stat
指针。所以当判断 _stat
是否为 NULL
时,它的值始终为 NULL
。需要在 ABRInt 的构造函数中为 _stat
成员变量分配内存并初始化。
在代码中没有看到 _stat 成员变量的初始化,因此在使用 _stat 前需要对其进行初始化。一种方式是在类的构造函数中对 _stat 进行初始化,例如:
ABRInt(ABRConfig& config, GooseStatInfo* s) : _stat(s) {
// ... other codes
}
在这种情况下,类的构造函数将使用传入的 s 参数来初始化 _stat 成员变量。
另外,需要注意 _stat 变量的类型为指针类型,因此在使用 _stat 时需要先判断其是否为 NULL,如果为 NULL 则表示指针未指向任何内存空间,此时使用 _stat 会导致程序崩溃。因此,可以在调用 setCustom 函数之前,添加对 _stat 的 NULL 检查,例如:
if (_stat != NULL) {
_stat->setCustom(results);
}
这样就可以避免在 _stat 未初始化时调用 setCustom 函数导致程序出错的问题。
不知道你这个问题是否已经解决, 如果还没有解决的话: