【问题标题】:Elements in array keep changing unintentionally [duplicate]数组中的元素不断变化[重复]
【发布时间】:2017-06-23 11:19:39
【问题描述】:

所以我有两个数组来保存玩家 x、y 和 z 坐标,但是每次我调用它们时,它们会在第一次打印到控制台时更改它们的值,它们会显示正确的结果,但是随后会打印到屏幕上产生非常小的数字,

HisPosition = GetPlayerPosition(aPlayer);
std::cout << "TheirPos=" << std::dec << HisPosition[0] << std::endl;
std::cout << "TheirPos1=" << std::dec << HisPosition[0] << std::endl;

if(!isnan(HisPosition[0])){
    std::cout << "TheirPos2=" << std::dec << HisPosition[0] << std::endl;

控制台输出示例:

TheirPos=440
TheirPos1=1.7118e-037
TheirPos2=1.7118e-037

它们的定义如下:

float* HisPosition;

还有GetPlayerPosition:

float* GetPlayerPosition(DWORD dwBase)
{
    float result [3];
    DWORD aXPos = dwBase + 0x134;
    DWORD aYPos = dwBase + 0x138;
    DWORD aZPos = dwBase + 0x13C;

    result[0] = Read<float>(aXPos);
    result[1] = Read<float>(aYPos);
    result[2] = Read<float>(aZPos);

    return result;
}

aPlayer 代表我试图获取的玩家内存中的地址,偏移量是正确的,因为在第一个控制台打印位置是正确的。

我是在 C++ 中使用数组的新手,希望得到任何指导。

【问题讨论】:

  • return result; 返回一个指向数组的指针,然后在返回时立即销毁该数组。你有未定义的行为。

标签: c++ arrays


【解决方案1】:

return result;dangling pointer 返回到本地堆栈分配的数组,当超出范围时该数组将消失。

【讨论】:

  • 干杯我怎样才能确保它仍然存在,所以它不会消​​失?编辑:我的坏只是看着重复。不会撒谎,我不知道要搜索什么。
  • @JossBird 例如:通过返回对象而不是指针。您甚至可以使用 [0] ... 正确命名元素
  • 您可以使用 3 个浮点数而不是原始指针返回 ::std::array 类,或者定义一个 Position 类来保持协调并返回它。
  • @KIIV 和 VTT 你们都是天才我创建了一个新结构,现在一切正常!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 2015-03-13
相关资源
最近更新 更多