This tricky error has been driving me crazy recently. Here is the log:
Access violation - code c0000005 (first/second chance not available)
UE4Editor_ProcTerra_310!GenerateVertexIndices() [d:\documents\unreal projects\procterra\source\procterra\terraingen\dualcontouring\octree.cpp:213]
UE4Editor_ProcTerra_310!GenerateMeshFromOctree() [d:\documents\unreal projects\procterra\source\procterra\terraingen\dualcontouring\octree.cpp:647]
UE4Editor_ProcTerra_310!AProcTerrainActor::GenerateChunk() [d:\documents\unreal projects\procterra\source\procterra\terraingen\dualcontouring\procterrainactor.cpp:52]
UE4Editor_Engine!AActor::ExecuteConstruction() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\actorconstruction.cpp:531]
UE4Editor_Engine!AActor::FinishSpawning() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\actor.cpp:2458]
UE4Editor_Engine!AActor::PostSpawnInitialize() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\actor.cpp:2449]
UE4Editor_Engine!UWorld::SpawnActor() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\levelactor.cpp:348]
UE4Editor_UnrealEd!UEditorEngine::AddActor() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\editor\unrealed\private\editorengine.cpp:5435]
UE4Editor_UnrealEd!AttemptDropObjAsActors() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\editor\unrealed\private\leveleditorviewport.cpp:209]
UE4Editor_UnrealEd!FLevelEditorViewportClient::DropObjectsOnBackground() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\editor\unrealed\private\leveleditorviewport.cpp:825]
UE4Editor_UnrealEd!FLevelEditorViewportClient::DropObjectsAtCoordinates() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\editor\unrealed\private\leveleditorviewport.cpp:1249]
UE4Editor_LevelEditor!SLevelViewport::HandlePlaceDraggedObjects() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\editor\leveleditor\private\slevelviewport.cpp:774]
UE4Editor_LevelEditor!SLevelViewport::OnDragEnter() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\editor\leveleditor\private\slevelviewport.cpp:441]
UE4Editor_Slate!<lambda_fd6dca33ff9154ce9cef90e634213ed9>::operator()() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:4532]
UE4Editor_Slate!FEventRouter::Route<FNoReply,FEventRouter::FBubblePolicy,FDragDropEvent,<lambda_fd6dca33ff9154ce9cef90e634213ed9> >() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:212]
UE4Editor_Slate!FSlateApplication::ProcessMouseMoveEvent() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:4533]
UE4Editor_Slate!FSlateApplication::OnMouseMove() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\slate\private\framework\application\slateapplication.cpp:4334]
UE4Editor_Core!FWindowsApplication::ProcessDeferredMessage() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\core\private\windows\windowsapplication.cpp:1450]
UE4Editor_Core!FWindowsApplication::DeferMessage() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\core\private\windows\windowsapplication.cpp:1708]
UE4Editor_Core!FWindowsApplication::ProcessMessage() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\core\private\windows\windowsapplication.cpp:706]
UE4Editor_Core!FWindowsApplication::AppWndProc() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\core\private\windows\windowsapplication.cpp:628]
user32
user32
UE4Editor_Core!FWindowsPlatformMisc::PumpMessages() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\core\private\windows\windowsplatformmisc.cpp:792]
UE4Editor!FEngineLoop::Tick() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\launch\private\launchengineloop.cpp:2323]
UE4Editor!GuardedMain() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\launch\private\launch.cpp:142]
UE4Editor!GuardedMainWrapper() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\launch\private\windows\launchwindows.cpp:126]
UE4Editor!WinMain() [d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\launch\private\windows\launchwindows.cpp:200]
From this log it looked to me like the crash was occuring in GenerateVertexIndices(). Here is that function:
void GenerateVertexIndices(OctreeNode* node, TArray<MeshVertex>& vertexBuffer)
{
if (!node)
{
return;
}
if (node->type != Node_Leaf)
{
for (int i = 0; i < 8; i++)
{
if (!(node->children[i]))
{
UE_LOG(LogTemp, Warning, TEXT("Null child but thats ok"));
return;
}
if (!(node->children[i]->size))
{
UE_LOG(LogTemp, Warning, TEXT("This shoudn't happen if the previous check was passed"));
return;
}
UE_LOG(LogTemp, Warning, TEXT("%d"), node->children[i]->size);
//GenerateVertexIndices(node->children[i], vertexBuffer);
}
}
if (node->type != Node_Internal)
{
OctreeDrawInfo* d = node->drawInfo;
if (!d)
{
UE_LOG(LogTemp, Warning, TEXT("Error! Could not add vertex!\n"));
return;
}
//d->index = vertexBuffer.Num();
//vertexBuffer.Add(MeshVertex(d->position, d->averageNormal));
}
}
The crash was originally citing the lines that are now commented out. Both of them caused the crash individually. I read that the error may have something to do with a null pointer or reference so I added extra checks to try to see whats going on. Bizarrely, the program passes the check verifying that children[i] exists and then crashes when trying to access the size member. I thought it might be something to do with UE4 garbage collection so I added UProperty() to those members of the OctreeNode class which is here:
class PROCTERRA_API OctreeNode
{
public:
OctreeNode()
: type(Node_None)
, min(0, 0, 0)
, size(0)
, drawInfo(nullptr)
{
for (int i = 0; i < 8; i++)
{
children[i] = nullptr;
}
}
OctreeNode(const OctreeNodeType _type)
: type(_type)
, min(0, 0, 0)
, size(0)
, drawInfo(nullptr)
{
for (int i = 0; i < 8; i++)
{
children[i] = nullptr;
}
}
OctreeNodeType type;
FVector min;
int size;
UPROPERTY()
OctreeNode* children[8];
UPROPERTY()
OctreeDrawInfo* drawInfo;
};
This didn’t change anything. I can’t think of a single other thing to try right now, so I could really use some help.
EDIT: Same error in my function that is just supposed to destroy the octree. Again I don’t see how this is happening:
void DestroyOctree(OctreeNode* node)
{
if (!node)
{
return;
}
for (int i = 0; i < 8; i++)
{
DestroyOctree(node->children[i]);
}
if (node->drawInfo)
{
delete node->drawInfo;
}
delete node;
}
The error says it is at the line where node->children[i] is used