Can't determine source of error: Access violation - code c0000005

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