From d7c9b7ab0225c2084aaeb3845823b5552d207cb6 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 14 Mar 2023 06:24:02 +0200 Subject: [PATCH] Prevent dangling pointer --- Core/Disk.cpp | 6 ++--- Core/Driver/Driver.cpp | 10 +++++--- Core/Driver/DriverLoading/BindInput.cpp | 8 +++--- Core/Driver/DriverLoading/BindInterrupt.cpp | 24 +++++++++--------- Core/Driver/DriverLoading/BindPCI.cpp | 28 ++++++++++----------- Core/Video/Display.cpp | 3 ++- Execute/Elf/BaseLoad.cpp | 6 ++--- Execute/Elf/Rel.cpp | 4 +-- FileSystem/Filesystem.cpp | 4 +-- GUI/GraphicalUserInterface.cpp | 10 ++++---- GUI/WidgetEvents.cpp | 3 ++- GUI/Widgets.cpp | 6 ++--- GUI/Window.cpp | 2 +- GUI/WindowEvents.cpp | 3 ++- Network/AddressResolutionProtocol.cpp | 6 ++--- Network/NetworkController.cpp | 2 +- Recovery/RecoveryMain.cpp | 2 +- Tasking/InterProcessCommunication.cpp | 2 +- Tasking/Task.cpp | 24 +++++++++--------- include/hashmap.hpp | 6 ++--- include/smartptr.hpp | 14 +++++------ include/string.hpp | 2 +- include/vector.hpp | 6 ++--- 23 files changed, 91 insertions(+), 90 deletions(-) diff --git a/Core/Disk.cpp b/Core/Disk.cpp index 2442f958..c117da1e 100644 --- a/Core/Disk.cpp +++ b/Core/Disk.cpp @@ -49,7 +49,7 @@ namespace Disk memcpy(&drive->Table, RWBuffer, sizeof(PartitionTable)); /* - ----> Add to devfs the disk + TODO: Add to devfs the disk */ if (drive->Table.GPT.Signature == GPT_MAGIC) @@ -101,7 +101,7 @@ namespace Disk sprintf(PartitionName, "sd%ldp%ld", drives.size() - 1, partition->Index); /* - ----> Add to devfs the disk + TODO: Add to devfs the disk */ delete[] PartitionName; @@ -131,7 +131,7 @@ namespace Disk sprintf(PartitionName, "sd%ldp%ld", drives.size() - 1, partition->Index); /* - ----> Add to devfs the disk + TODO: Add to devfs the disk */ delete[] PartitionName; diff --git a/Core/Driver/Driver.cpp b/Core/Driver/Driver.cpp index e27f0f1b..cee4a6a2 100644 --- a/Core/Driver/Driver.cpp +++ b/Core/Driver/Driver.cpp @@ -41,13 +41,14 @@ namespace Driver debug("Stopping & unloading driver %ld [%#lx]", drv->DriverUID, drv->Address); DriverManager->IOCB(drv->DriverUID, (void *)&callback); - delete drv->MemTrk; + delete drv->MemTrk, drv->MemTrk = nullptr; for (size_t j = 0; j < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); j++) { if (!drv->InterruptHook[j]) continue; - delete drv->InterruptHook[j]; + delete drv->InterruptHook[j], drv->InterruptHook[j] = nullptr; } + delete drv, drv = nullptr; Drivers.remove(i); } } @@ -65,13 +66,14 @@ namespace Driver debug("Stopping and unloading driver %ld [%#lx]", drv->DriverUID, drv->Address); this->IOCB(drv->DriverUID, (void *)&callback); - delete drv->MemTrk; + delete drv->MemTrk, drv->MemTrk = nullptr; for (size_t i = 0; i < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); i++) { if (!drv->InterruptHook[i]) continue; - delete drv->InterruptHook[i]; + delete drv->InterruptHook[i], drv->InterruptHook[i] = nullptr; } + delete drv, drv = nullptr; Drivers.remove(i); return true; } diff --git a/Core/Driver/DriverLoading/BindInput.cpp b/Core/Driver/DriverLoading/BindInput.cpp index bcce8c7a..77106351 100644 --- a/Core/Driver/DriverLoading/BindInput.cpp +++ b/Core/Driver/DriverLoading/BindInput.cpp @@ -50,13 +50,13 @@ namespace Driver int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback); if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) { - delete mem; + delete mem, mem = nullptr; error("Driver %s is not implemented", fexExtended->Driver.Name); return DriverCode::NOT_IMPLEMENTED; } else if (CallbackRet != DriverReturnCode::OK) { - delete mem; + delete mem, mem = nullptr; error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); return DriverCode::DRIVER_RETURNED_ERROR; } @@ -98,7 +98,7 @@ namespace Driver if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK) { - delete mem; + delete mem, mem = nullptr; return DriverCode::DRIVER_RETURNED_ERROR; } debug("Starting driver %s (offset: %#lx)", fexExtended->Driver.Name, fex); @@ -110,7 +110,7 @@ namespace Driver default: { warn("Unknown driver type: %d", fexExtended->Driver.Type); - delete mem; + delete mem, mem = nullptr; return DriverCode::UNKNOWN_DRIVER_TYPE; } } diff --git a/Core/Driver/DriverLoading/BindInterrupt.cpp b/Core/Driver/DriverLoading/BindInterrupt.cpp index 8f5f6f62..6c317f35 100644 --- a/Core/Driver/DriverLoading/BindInterrupt.cpp +++ b/Core/Driver/DriverLoading/BindInterrupt.cpp @@ -103,7 +103,7 @@ namespace Driver } fixme("Display driver: %s", fexExtended->Driver.Name); - delete mem; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } @@ -147,7 +147,7 @@ namespace Driver } fixme("Network driver: %s", fexExtended->Driver.Name); - delete mem; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } @@ -208,13 +208,13 @@ namespace Driver if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) { error("Driver %s is not implemented", fexExtended->Driver.Name); - delete mem; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } else if (CallbackRet != DriverReturnCode::OK) { error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); - delete mem; + delete mem, mem = nullptr; return DriverCode::DRIVER_RETURNED_ERROR; } @@ -267,7 +267,7 @@ namespace Driver } fixme("Filesystem driver: %s", fexExtended->Driver.Name); - delete mem; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } @@ -347,15 +347,15 @@ namespace Driver if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) { error("Driver %s is not implemented", fexExtended->Driver.Name); - delete InterruptHook; - delete mem; + delete InterruptHook, InterruptHook = nullptr; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } else if (CallbackRet != DriverReturnCode::OK) { error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); - delete InterruptHook; - delete mem; + delete InterruptHook, InterruptHook = nullptr; + delete mem, mem = nullptr; return DriverCode::DRIVER_RETURNED_ERROR; } @@ -412,7 +412,7 @@ namespace Driver } fixme("Audio driver: %s", fexExtended->Driver.Name); - delete mem; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } @@ -435,7 +435,7 @@ namespace Driver if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK) { - delete mem; + delete mem, mem = nullptr; return DriverCode::DRIVER_RETURNED_ERROR; } debug("Starting driver %s (offset: %#lx)", fexExtended->Driver.Name, fex); @@ -459,7 +459,7 @@ namespace Driver default: { warn("Unknown driver type: %d", fexExtended->Driver.Type); - delete mem; + delete mem, mem = nullptr; return DriverCode::UNKNOWN_DRIVER_TYPE; } } diff --git a/Core/Driver/DriverLoading/BindPCI.cpp b/Core/Driver/DriverLoading/BindPCI.cpp index e92cbbda..50a61f04 100644 --- a/Core/Driver/DriverLoading/BindPCI.cpp +++ b/Core/Driver/DriverLoading/BindPCI.cpp @@ -167,7 +167,7 @@ namespace Driver } fixme("Generic driver: %s", fexExtended->Driver.Name); - delete mem; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } @@ -211,7 +211,7 @@ namespace Driver } fixme("Display driver: %s", fexExtended->Driver.Name); - delete mem; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } @@ -266,8 +266,8 @@ namespace Driver if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) { error("Driver %s is not implemented", fexExtended->Driver.Name); - delete mem; - delete InterruptHook; + delete mem, mem = nullptr; + delete InterruptHook, InterruptHook = nullptr; return DriverCode::NOT_IMPLEMENTED; } else if (CallbackRet == DriverReturnCode::OK) @@ -275,8 +275,8 @@ namespace Driver else { error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); - delete mem; - delete InterruptHook; + delete mem, mem = nullptr; + delete InterruptHook, InterruptHook = nullptr; return DriverCode::DRIVER_RETURNED_ERROR; } @@ -340,7 +340,7 @@ namespace Driver if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) { error("Driver %s is not implemented", fexExtended->Driver.Name); - delete mem; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } else if (CallbackRet == DriverReturnCode::OK) @@ -348,7 +348,7 @@ namespace Driver else { error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); - delete mem; + delete mem, mem = nullptr; return DriverCode::DRIVER_RETURNED_ERROR; } @@ -402,7 +402,7 @@ namespace Driver } fixme("Filesystem driver: %s", fexExtended->Driver.Name); - delete mem; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } @@ -446,7 +446,7 @@ namespace Driver } fixme("Input driver: %s", fexExtended->Driver.Name); - delete mem; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } @@ -501,7 +501,7 @@ namespace Driver if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) { error("Driver %s is not implemented", fexExtended->Driver.Name); - delete mem; + delete mem, mem = nullptr; return DriverCode::NOT_IMPLEMENTED; } else if (CallbackRet == DriverReturnCode::OK) @@ -509,7 +509,7 @@ namespace Driver else { error("Driver %s returned error %d", fexExtended->Driver.Name, CallbackRet); - delete mem; + delete mem, mem = nullptr; return DriverCode::DRIVER_RETURNED_ERROR; } @@ -562,7 +562,7 @@ namespace Driver if (CallDriverEntryPoint(fex, KAPI) != DriverCode::OK) { - delete mem; + delete mem, mem = nullptr; return DriverCode::DRIVER_RETURNED_ERROR; } debug("Starting driver %s", fexExtended->Driver.Name); @@ -588,7 +588,7 @@ namespace Driver default: { warn("Unknown driver type: %d", fexExtended->Driver.Type); - delete mem; + delete mem, mem = nullptr; return DriverCode::UNKNOWN_DRIVER_TYPE; } } diff --git a/Core/Video/Display.cpp b/Core/Video/Display.cpp index 014126a3..e95d0080 100644 --- a/Core/Video/Display.cpp +++ b/Core/Video/Display.cpp @@ -74,8 +74,9 @@ namespace Video if (this->Buffers[Index] == nullptr) return; KernelAllocator.FreePages(this->Buffers[Index]->Buffer, TO_PAGES(this->Buffers[Index]->Size)); + this->Buffers[Index]->Buffer = nullptr; this->Buffers[Index]->Checksum = 0; // Making sure that the buffer is not used anymore - delete this->Buffers[Index]; + delete this->Buffers[Index], this->Buffers[Index] = nullptr; } void Display::SetBufferCursor(int Index, uint32_t X, uint32_t Y) diff --git a/Execute/Elf/BaseLoad.cpp b/Execute/Elf/BaseLoad.cpp index afded854..74aa582f 100644 --- a/Execute/Elf/BaseLoad.cpp +++ b/Execute/Elf/BaseLoad.cpp @@ -39,7 +39,7 @@ namespace Execute uintptr_t *TmpBuffer = new uintptr_t[0x1000]; *(int *)TmpBuffer = 2545; InterProcessCommunication::IPCErrorCode ret = Process->IPC->Write(Handle->ID, TmpBuffer, 0x1000); - delete[] TmpBuffer; + delete[] TmpBuffer, TmpBuffer = nullptr; debug("Write returned %d", ret); if (ret == InterProcessCommunication::IPCErrorCode::IPCNotListening) { @@ -57,7 +57,7 @@ namespace Execute void ELFInterpreterThreadWrapper() { ELFInterpreterIPCThread(InterpreterTargetProcess, (char *)InterpreterTargetPath->c_str(), InterpreterMemoryImage, InterpreterNeededLibraries); - delete InterpreterTargetPath; + delete InterpreterTargetPath, InterpreterTargetPath = nullptr; return; } @@ -206,7 +206,7 @@ namespace Execute Thread->Memory->Add(p.Address, p.PageCount); bl.TmpMem->DetachAddress(p.Address); } - delete bl.TmpMem; + delete bl.TmpMem, bl.TmpMem = nullptr; bl.sd.Process = Process; bl.sd.Thread = Thread; diff --git a/Execute/Elf/Rel.cpp b/Execute/Elf/Rel.cpp index 5b5e57d2..3153e21a 100644 --- a/Execute/Elf/Rel.cpp +++ b/Execute/Elf/Rel.cpp @@ -62,7 +62,7 @@ namespace Execute SymbolValue = ELFGetSymbolValue(((Elf64_Ehdr *)BaseImage), Section->sh_link, ELF64_R_SYM(RelTable->r_info)); if (SymbolValue == 0xdead) { - delete ELFBase.TmpMem; + delete ELFBase.TmpMem, ELFBase.TmpMem = nullptr; return {}; } } @@ -80,7 +80,7 @@ namespace Execute default: { error("Unsupported relocation type: %d", ELF64_R_TYPE(RelTable->r_info)); - delete ELFBase.TmpMem; + delete ELFBase.TmpMem, ELFBase.TmpMem = nullptr; return {}; } } diff --git a/FileSystem/Filesystem.cpp b/FileSystem/Filesystem.cpp index aae8cd35..ec8e0260 100644 --- a/FileSystem/Filesystem.cpp +++ b/FileSystem/Filesystem.cpp @@ -94,7 +94,7 @@ namespace VirtualFileSystem FinalPath.Get()[Size - 1] = '\0'; // Deallocate the Path array - delete[] Path; + delete[] Path, Path = nullptr; vfsdbg("GetPathFromNode()->\"%s\"", FinalPath.Get()); return FinalPath; @@ -246,7 +246,7 @@ namespace VirtualFileSystem { if (strcmp(Parent->Children[i]->Name, Name) == 0) { - delete Parent->Children[i]; + delete Parent->Children[i], Parent->Children[i] = nullptr; Parent->Children.remove(i); vfsdbg("RemoveChild()->OK"); return FileStatus::OK; diff --git a/GUI/GraphicalUserInterface.cpp b/GUI/GraphicalUserInterface.cpp index b8d787bc..1148f9aa 100644 --- a/GUI/GraphicalUserInterface.cpp +++ b/GUI/GraphicalUserInterface.cpp @@ -636,11 +636,11 @@ namespace GraphicalUserInterface GUI::~GUI() { - delete this->mem; - delete this->BackBuffer; - delete this->DesktopBuffer; - delete this->OverlayBuffer; - delete this->CursorBuffer; + delete this->mem, this->mem = nullptr; + delete this->BackBuffer, this->BackBuffer = nullptr; + delete this->DesktopBuffer, this->DesktopBuffer = nullptr; + delete this->OverlayBuffer, this->OverlayBuffer = nullptr; + delete this->CursorBuffer, this->CursorBuffer = nullptr; Display->DeleteBuffer(200); for (size_t i = 0; i < this->Windows.size(); i++) this->Windows.remove(i); diff --git a/GUI/WidgetEvents.cpp b/GUI/WidgetEvents.cpp index ff2ae0e0..b650ded0 100644 --- a/GUI/WidgetEvents.cpp +++ b/GUI/WidgetEvents.cpp @@ -57,7 +57,8 @@ namespace GraphicalUserInterface LastHeight = ((Window *)this->ParentWindow)->GetPosition().Height; this->mem->FreePages(this->Buffer->Data, TO_PAGES(this->Buffer->Size)); - delete this->Buffer; + this->Buffer->Data = nullptr; + delete this->Buffer, this->Buffer = nullptr; this->Buffer = new ScreenBitmap; this->Buffer->Width = LastWidth; diff --git a/GUI/Widgets.cpp b/GUI/Widgets.cpp index 15b383d3..9559c33d 100644 --- a/GUI/Widgets.cpp +++ b/GUI/Widgets.cpp @@ -117,8 +117,8 @@ namespace GraphicalUserInterface WidgetCollection::~WidgetCollection() { - delete this->mem; - delete this->Buffer; - delete this->CurrentFont; + delete this->mem, this->mem = nullptr; + delete this->Buffer, this->Buffer = nullptr; + delete this->CurrentFont, this->CurrentFont = nullptr; } } diff --git a/GUI/Window.cpp b/GUI/Window.cpp index 280d1205..6326f7eb 100644 --- a/GUI/Window.cpp +++ b/GUI/Window.cpp @@ -60,6 +60,6 @@ namespace GraphicalUserInterface Window::~Window() { - delete this->mem; + delete this->mem, this->mem = nullptr; } } diff --git a/GUI/WindowEvents.cpp b/GUI/WindowEvents.cpp index 0837e01f..a05ca7d4 100644 --- a/GUI/WindowEvents.cpp +++ b/GUI/WindowEvents.cpp @@ -15,7 +15,8 @@ namespace GraphicalUserInterface { // TODO: Optimize this this->mem->FreePages(this->Buffer->Data, TO_PAGES(this->Buffer->Size)); - delete this->Buffer; + this->Buffer->Data = nullptr; + delete this->Buffer, this->Buffer = nullptr; this->Buffer = new ScreenBitmap; this->Buffer->Width = e->Resize.Width; diff --git a/Network/AddressResolutionProtocol.cpp b/Network/AddressResolutionProtocol.cpp index 0ef78360..5b94e03e 100644 --- a/Network/AddressResolutionProtocol.cpp +++ b/Network/AddressResolutionProtocol.cpp @@ -27,7 +27,7 @@ namespace NetworkARP { DiscoveredAddress *tmp = DiscoveredAddresses[i]; netdbg("Removed %s from discovered addresses", IP.v4.ToStringLittleEndian()); - delete tmp; + delete tmp, tmp = nullptr; DiscoveredAddresses.remove(i); } } @@ -125,7 +125,7 @@ namespace NetworkARP InternetProtocol().v4.FromHex(Header->TargetIP).ToStringLittleEndian()); /* Send the request to the broadcast MAC address. */ Ethernet->Send({.Address = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}, NetworkEthernet::FrameType::TYPE_ARP, (uint8_t *)Header, sizeof(ARPHeader)); - delete Header; + delete Header, Header = nullptr; } int RequestTimeout = 20; @@ -160,7 +160,7 @@ namespace NetworkARP Header->TargetMAC = b48(ResolvedMAC); Header->TargetIP = b32(IP.v4.ToHex()); Ethernet->Send(MediaAccessControl().FromHex(ResolvedMAC), NetworkEthernet::FrameType::TYPE_ARP, (uint8_t *)Header, sizeof(ARPHeader)); - delete Header; + delete Header, Header = nullptr; } bool ARP::OnEthernetPacketReceived(uint8_t *Data, uint64_t Length) diff --git a/Network/NetworkController.cpp b/Network/NetworkController.cpp index 8ee8e766..f89f9ef5 100644 --- a/Network/NetworkController.cpp +++ b/Network/NetworkController.cpp @@ -46,7 +46,7 @@ namespace NetworkInterfaceManager RegisteredEvents.remove(i); // Delete all interfaces and their callbacks and free the memory - delete mem; + delete mem, mem = nullptr; } void NetworkInterface::FetchNetworkCards(unsigned long DriverUID) diff --git a/Recovery/RecoveryMain.cpp b/Recovery/RecoveryMain.cpp index 7facc7e6..75a71b95 100644 --- a/Recovery/RecoveryMain.cpp +++ b/Recovery/RecoveryMain.cpp @@ -304,6 +304,6 @@ namespace Recovery KernelRecovery::~KernelRecovery() { debug("Destructor called"); - delete gui; + delete gui, gui = nullptr; } } diff --git a/Tasking/InterProcessCommunication.cpp b/Tasking/InterProcessCommunication.cpp index 27c9749b..fd48efd9 100644 --- a/Tasking/InterProcessCommunication.cpp +++ b/Tasking/InterProcessCommunication.cpp @@ -236,7 +236,7 @@ namespace InterProcessCommunication IPC::~IPC() { - delete mem; + delete mem, mem = nullptr; vfs->Delete(IPCNode, true); } } diff --git a/Tasking/Task.cpp b/Tasking/Task.cpp index 4f1eac04..57c5c675 100644 --- a/Tasking/Task.cpp +++ b/Tasking/Task.cpp @@ -88,10 +88,10 @@ namespace Tasking trace("Thread \"%s\"(%d) removed from process \"%s\"(%d)", Thread->Name, Thread->ID, Thread->Parent->Name, Thread->Parent->ID); // Free memory - delete Thread->Stack; - delete Thread->Memory; + delete Thread->Stack, Thread->Stack = nullptr; + delete Thread->Memory, Thread->Memory = nullptr; SecurityManager.DestroyToken(Thread->Security.UniqueToken); - delete Thread->Parent->Threads[i]; + delete Thread->Parent->Threads[i], Thread->Parent->Threads[i] = nullptr; // Remove from the list Thread->Parent->Threads.remove(i); break; @@ -117,8 +117,8 @@ namespace Tasking { trace("Process \"%s\"(%d) removed from the list", Process->Name, Process->ID); // Free memory - delete ListProcess[i]->IPC; - delete ListProcess[i]->ELFSymbolTable; + delete ListProcess[i]->IPC, ListProcess[i]->IPC = nullptr; + delete ListProcess[i]->ELFSymbolTable, ListProcess[i]->ELFSymbolTable = nullptr; SecurityManager.DestroyToken(ListProcess[i]->Security.UniqueToken); if (ListProcess[i]->Security.TrustLevel == TaskTrustLevel::User) KernelAllocator.FreePages((void *)ListProcess[i]->PageTable, TO_PAGES(PAGE_SIZE)); @@ -138,7 +138,7 @@ namespace Tasking vfs->Delete(ListProcess[i]->ProcessDirectory, true); // Free memory - delete ListProcess[i]; + delete ListProcess[i], ListProcess[i] = nullptr; // Remove from the list ListProcess.remove(i); break; @@ -304,9 +304,9 @@ namespace Tasking } } - delete Process->IPC; - delete Process->ELFSymbolTable; - delete Process; + delete Process->IPC, Process->IPC = nullptr; + delete Process->ELFSymbolTable, Process->ELFSymbolTable = nullptr; + delete Process, Process = nullptr; ListProcess.remove(i); NextPID--; break; @@ -325,10 +325,10 @@ namespace Tasking } } - delete Thread->Stack; - delete Thread->Memory; + delete Thread->Stack, Thread->Stack = nullptr; + delete Thread->Memory, Thread->Memory = nullptr; SecurityManager.DestroyToken(Thread->Security.UniqueToken); - delete Thread; + delete Thread, Thread = nullptr; NextTID--; } diff --git a/include/hashmap.hpp b/include/hashmap.hpp index d9ca486f..5bbff155 100644 --- a/include/hashmap.hpp +++ b/include/hashmap.hpp @@ -39,9 +39,9 @@ public: { for (int i = 0; i < HashMapCapacity; i++) if (Nodes[i] != nullptr) - delete Nodes[i]; - delete[] Nodes; - delete DummyNode; + delete Nodes[i], Nodes[i] = nullptr; + delete[] Nodes, Nodes = nullptr; + delete DummyNode, DummyNode = nullptr; } int HashCode(K Key) { return Key % HashMapCapacity; } diff --git a/include/smartptr.hpp b/include/smartptr.hpp index 85ea9d77..6416407a 100644 --- a/include/smartptr.hpp +++ b/include/smartptr.hpp @@ -41,7 +41,7 @@ public: ~smart_ptr() { spdbg("Smart pointer deleted (%#lx)", m_RealPointer); - delete (m_RealPointer); + delete m_RealPointer, m_RealPointer = nullptr; } T &operator*() @@ -151,8 +151,8 @@ public: if (m_ReferenceCounter->Get() == 0) { spdbg("[%#lx] Shared pointer deleted (ptr=%#lx, ref=%#lx)", this, m_RealPointer, m_ReferenceCounter); - delete m_ReferenceCounter; - delete m_RealPointer; + delete m_ReferenceCounter, m_ReferenceCounter = nullptr; + delete m_RealPointer, m_RealPointer = nullptr; } } @@ -188,8 +188,8 @@ public: (*m_ReferenceCounter)--; if (m_ReferenceCounter->Get() == 0) { - delete m_ReferenceCounter; delete m_RealPointer; + delete m_ReferenceCounter; } m_RealPointer = Pointer; m_ReferenceCounter = new Counter(); @@ -202,15 +202,13 @@ public: spdbg("[%#lx] Shared pointer reset (ptr=%#lx, ref=%#lx)", this, m_RealPointer, m_ReferenceCounter); if (m_ReferenceCounter->Get() == 1) { - delete m_RealPointer; - delete m_ReferenceCounter; + delete m_RealPointer, m_RealPointer = nullptr; + delete m_ReferenceCounter, m_ReferenceCounter = nullptr; } else { (*m_ReferenceCounter)--; } - m_RealPointer = nullptr; - m_ReferenceCounter = nullptr; } void swap(shared_ptr &Other) diff --git a/include/string.hpp b/include/string.hpp index b12d251e..99dbcbbc 100644 --- a/include/string.hpp +++ b/include/string.hpp @@ -40,7 +40,7 @@ public: ~String() { strdbg("String deleted: \"%s\" (data: %#lx, length: %d, capacity: %d)", this->m_Data, this->m_Data, this->m_Length, this->m_Capacity); - delete[] this->m_Data; + delete[] this->m_Data, this->m_Data = nullptr; } int length() const diff --git a/include/vector.hpp b/include/vector.hpp index ba8b434f..ed0198c0 100644 --- a/include/vector.hpp +++ b/include/vector.hpp @@ -71,8 +71,7 @@ public: VectorCapacity = 0; if (VectorBuffer != nullptr) { - delete[] VectorBuffer; - VectorBuffer = nullptr; + delete[] VectorBuffer, VectorBuffer = nullptr; } } @@ -230,8 +229,7 @@ public: VectorSize = 0; if (VectorBuffer != nullptr) { - delete[] VectorBuffer; - VectorBuffer = nullptr; + delete[] VectorBuffer, VectorBuffer = nullptr; } }