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