分配浮点时访问违规位置(0x0000000000000170)

Access Violation Reading Location when assigning Float (0x0000000000000170)

本文关键字:位置 0x0000000000000170 访问 分配      更新时间:2023-10-16

我正在使用访问违规的读取地点崩溃。我正在虚幻引擎中进行此操作,但这很简单,我认为问题应该在C 中普遍适用,尽管我是新手。

尝试在opendoor.cpp的opendoor()(下)中分配LastDoototentime时崩溃。我能够在uopendoor :: beginplay()的程序开始时成功地分配给它,但是在opendoor()中尝试同一件事将应用程序崩溃了"访问违规读取位置"。

opendoor.h:

#pragma once
#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "GameFramework/Actor.h"
#include "Engine/TriggerVolume.h"
#include "Engine/World.h"
#include "OpenDoor.generated.h"

UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class ESCAPEROOM_API UOpenDoor : public UActorComponent
{
    GENERATED_BODY()
public: 
    // Sets default values for this component's properties
    UOpenDoor();
protected:
    // Called when the game starts
    virtual void BeginPlay() override;
    void OpenDoor();
    void CloseDoor();
public: 
    // Called every frame
    virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
private:
    UPROPERTY(VisibleAnywhere)
        float OpenAngle = -60.f;
    UPROPERTY(EditAnywhere)
        ATriggerVolume* PressurePlate;
    UPROPERTY(EditAnywhere)
        float DoorCloseDelay = 1.f;
    float LastDoorOpenTime;
    AActor* ActorThatOpens;
    AActor* Owner;
    bool IsDoorOpen;
    UWorld* ThisWorld;
};

opendoor.cpp:

#include "OpenDoor.h"
// Sets default values for this component's properties
UOpenDoor::UOpenDoor()
{
    // Set this component to be initialized when the game starts, and to be ticked every frame.  You can turn these features
    // off to improve performance if you don't need them.
    PrimaryComponentTick.bCanEverTick = true;
    // ...
}

// Called when the game starts
void UOpenDoor::BeginPlay()
{
    Super::BeginPlay();
    ThisWorld = GetWorld();
    ActorThatOpens = ThisWorld->GetFirstPlayerController()->GetPawn();
    AActor* Owner = GetOwner();
    IsDoorOpen = false;
}
void UOpenDoor::OpenDoor()
{
    Owner->SetActorRotation(FRotator(0.f, OpenAngle, 0.f));
    int cow = 1 + 1;
    LastDoorOpenTime = 0.f; //ACCESS VIOLATION HERE
    IsDoorOpen = true;
}
void UOpenDoor::CloseDoor()
{
    Owner->SetActorRotation(FRotator(0.f, 0.f, 0.f));
    IsDoorOpen = false;
}

// Called every frame
void UOpenDoor::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
    Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
    if (PressurePlate->IsOverlappingActor(ActorThatOpens)) {
        OpenDoor();
    }
    if (IsDoorOpen) {
        if (ThisWorld->GetTimeSeconds() >= LastDoorOpenTime + DoorCloseDelay) {
            CloseDoor();
        }
    }
}

更改:" aactor* lander = getowner();"到"所有者= getowner();";修复了它。