Bootstrap

UE4C++ access violation

UE4静态变量访问冲突导致引擎崩溃的问题

------问题所导致的情况------
运行第一次一般不会有任何问题
运行第二次时,引擎崩溃,debug信息为access violation

------导致这类问题的原因------
找了半天这个问题出现的原因,
排除了一切空指针访问,数组超界的情况后
最后锁定到了类似于这样的代码

void SomeClass::SomeFunction()
{
	...code...
	static APlayerController* PC = UGameplayStatics::GetPlayerController(this,0);
	...code...
}

在某类中的某个函数里,声明了一个 “静态的” 全局指针变量
static APlayerController* PC;

注意:

这个变量的生命周期是整个引擎从第一次运行到关闭,而不是单次运行

所以,当第一次在引擎里运行时,这个变量被初始化(分配了内存地址)

第二次在引擎里运行时,由于这个变量已经在第一次运行时被分配了值,所以这个变量将不会再被赋值

所以也就导致第二次运行时访问了第一次运行时分配的内存地址,现在那个地址中所指的内容已经不再是原来的内容了,而你却访问了它

;