Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数组中的元素一直在无意中更改_C++_Arrays - Fatal编程技术网

C++ 数组中的元素一直在无意中更改

C++ 数组中的元素一直在无意中更改,c++,arrays,C++,Arrays,因此,我有两个数组,它们保持玩家的x、y和z坐标,但是每次我调用它们时,它们会在第一次打印到控制台时更改它们的值,它们会显示正确的结果,但是随后打印到屏幕上会产生非常小的数 HisPosition = GetPlayerPosition(aPlayer); std::cout << "TheirPos=" << std::dec << HisPosition[0] << std::endl; std::cout << "TheirPos

因此,我有两个数组,它们保持玩家的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;
它们的定义如下:

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;
}
float*GetPlayerPosition(DWORD dwBase)
{
浮动结果[3];
DWORD aXPos=dwBase+0x134;
DWORD aYPos=dwBase+0x138;
DWORD aZPos=dwBase+0x13C;
结果[0]=读取(aXPos);
结果[1]=读取(aYPos);
结果[2]=读取(aZPos);
返回结果;
}
aPlayer代表我试图获取的播放器内存中的地址。偏移量是正确的,因为在第一个控制台打印位置是正确的


<>我在C++中使用数组,并且会很感激任何指导。

< P>代码>返回结果;<代码>返回一个本地堆栈分配的数组,该数组在超出范围时消失

返回结果返回指向数组的指针,该数组在返回时立即被销毁。你有未定义的行为。干杯,我怎样才能确保它保持不变,这样它就不会消失?编辑:我的坏朋友刚看了副本。我不想撒谎,我不知道搜索什么。@JossBird例如:通过返回对象而不是指针。您甚至可以使用[0]正确命名元素……您可以使用3个浮点数而不是原始指针返回::std::array class,或者定义一个
位置
类来保持协调并返回它。@KIIV和VTT您都是genius的我创建了一个新的结构,现在一切都很好!非常感谢你!
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;
}