gpt4 book ai didi

C++调用了错误的函数

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

我有一个奇怪的错误,C++ 调用了错误的函数:

所以这段代码被调用了:

  class FmeGrid
{
// ....
virtual void saveGridParameters() const;
virtual void setCellSignalValue(int row, int col, double double_value, const std::string& string_value);
// ....
}

void EnfClientFrame::saveGridParameters()
{
this->grid->saveGridParameters();
}

堆栈中下一个被调用的函数是:

  void FmeGrid::setCellSignalValue(int row, int col, double double_value, const std::string& string_value)
{
this->setCellString(row, col, string_value, wxALIGN_RIGHT);
this->setCellBackground(row, col, GetSignalColour(double_value));
}

对于完全随机的值,堆栈如下:

enf_client.exe!ui::FmeGrid::setCellSignalValue(int row=1239452, int col=1239236, double double_value=-9.2559592117431994e+061, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & string_value={...})  Line 468 + 0x23 bytes  C++
enf_client.exe!ui::EnfClientFrame::saveGridParameters() Line 170 + 0x20 bytes C++

因此“网格”指针指向一个继承自 FmeGrid 的类(并且仅继承自 FmeGrid)。saveGridParameters 是一个虚函数,所以可能是因为这个。

最佳答案

最常见的原因是:

  1. 脏构建(即接口(interface)已更改,但未重建使用这些接口(interface)的对象)
  2. 堆栈损坏(您覆盖了堆栈上的某些内容,导致调用了错误的函数和/或使用无效参数调用了正确的函数)

尝试通过干净重建进行修复,如果仍然发生,则尝试使用内存调试工具(如 Valgrind)来查看您在哪里覆盖了堆栈。

关于C++调用了错误的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6340674/

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