From f8620fcd0b4dcc6006a6a228cd5cc79cc82a83fc Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Tue, 22 Mar 2011 07:27:23 +0000 Subject: [PATCH] Fixed some memory leaks. Only one was mine ;P git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7392 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/AudioCommon/Src/AudioCommon.cpp | 2 + Source/Core/Common/Src/ChunkFile.h | 34 +++++--------- Source/Core/Common/Src/ConsoleListener.cpp | 35 ++++++++------- Source/Core/Common/Src/FileUtil.cpp | 2 +- Source/Core/Core/Src/DSP/DSPEmitter.cpp | 1 - Source/Core/Core/Src/DSP/DSPEmitter.h | 2 +- Source/Core/Core/Src/DSPEmulator.h | 5 ++- Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h | 1 - Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h | 1 - .../Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp | 24 +++++----- .../Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h | 2 +- Source/Core/DolphinWX/Src/GameListCtrl.cpp | 44 ++++++++++++------- Source/Core/DolphinWX/Src/GameListCtrl.h | 4 +- Source/Core/DolphinWX/Src/ISOFile.cpp | 15 +++---- Source/Core/DolphinWX/Src/ISOFile.h | 4 +- .../ControllerInterface.cpp | 8 ++-- .../Src/OpenCL/OCLTextureDecoder.cpp | 2 +- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 2 +- 18 files changed, 89 insertions(+), 99 deletions(-) diff --git a/Source/Core/AudioCommon/Src/AudioCommon.cpp b/Source/Core/AudioCommon/Src/AudioCommon.cpp index 637f74502b..fa4d134860 100644 --- a/Source/Core/AudioCommon/Src/AudioCommon.cpp +++ b/Source/Core/AudioCommon/Src/AudioCommon.cpp @@ -31,6 +31,8 @@ namespace AudioCommon { SoundStream *InitSoundStream(CMixer *mixer, void *hWnd) { + // TODO: possible memleak with mixer + std::string backend = ac_Config.sBackend; if (backend == BACKEND_OPENAL && OpenALStream::isValid()) soundStream = new OpenALStream(mixer); diff --git a/Source/Core/Common/Src/ChunkFile.h b/Source/Core/Common/Src/ChunkFile.h index 5f897b1359..9dd1578890 100644 --- a/Source/Core/Common/Src/ChunkFile.h +++ b/Source/Core/Common/Src/ChunkFile.h @@ -119,9 +119,12 @@ public: // Store vectors. template - void Do(std::vector &x) { - // TODO - PanicAlert("Do(vector<>) does not yet work."); + void Do(std::vector &x) + { + u32 vec_size = (u32)x.size(); + Do(vec_size); + x.resize(vec_size); + DoArray(&x[0], vec_size); } // Store strings. @@ -138,23 +141,6 @@ public: } (*ptr) += stringLen; } - - void DoBuffer(u8** pBuffer, u32& _Size) - { - Do(_Size); - - if (_Size > 0) { - switch (mode) { - case MODE_READ: delete[] *pBuffer; *pBuffer = new u8[_Size]; memcpy(*pBuffer, *ptr, _Size); break; - case MODE_WRITE: memcpy(*ptr, *pBuffer, _Size); break; - case MODE_MEASURE: break; - case MODE_VERIFY: if(*pBuffer) for(u32 i = 0; i < _Size; i++) _dbg_assert_msg_(COMMON, (*pBuffer)[i] == (*ptr)[i], "Savestate verification failure: %d (0x%X) (at %p) != %d (0x%X) (at %p).\n", (*pBuffer)[i], (*pBuffer)[i], &(*pBuffer)[i], (*ptr)[i], (*ptr)[i], &(*ptr)[i]); break; - } - } else { - *pBuffer = NULL; - } - (*ptr) += _Size; - } template void DoArray(T *x, int count) { @@ -260,9 +246,9 @@ public: u8 *ptr = 0; PointerWrap p(&ptr, PointerWrap::MODE_MEASURE); _class.DoState(p); - size_t sz = (size_t)ptr; - u8 *buffer = new u8[sz]; - ptr = buffer; + size_t const sz = (size_t)ptr; + std::vector buffer(sz); + ptr = &buffer[0]; p.SetMode(PointerWrap::MODE_WRITE); _class.DoState(p); @@ -279,7 +265,7 @@ public: return false; } - if (!pFile.WriteBytes(buffer, sz)) + if (!pFile.WriteBytes(&buffer[0], sz)) { ERROR_LOG(COMMON,"ChunkReader: Failed writing data"); return false; diff --git a/Source/Core/Common/Src/ConsoleListener.cpp b/Source/Core/Common/Src/ConsoleListener.cpp index 4240061933..e0b2bf4d36 100644 --- a/Source/Core/Common/Src/ConsoleListener.cpp +++ b/Source/Core/Common/Src/ConsoleListener.cpp @@ -22,6 +22,7 @@ #include #ifdef _WIN32 #include +#include #else #include #endif @@ -175,8 +176,8 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool bool DAft = true; std::string SLog = ""; - HWND hWnd = GetConsoleWindow(); - HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + const HWND hWnd = GetConsoleWindow(); + const HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); // Get console info CONSOLE_SCREEN_BUFFER_INFO ConInfo; @@ -189,30 +190,30 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool DWORD cCharsRead = 0; COORD coordScreen = { 0, 0 }; - std::vector Str; - std::vector Attr; + static const int MAX_BYTES = 1024 * 16; + + std::vector> Str; + std::vector> Attr; + // ReadConsoleOutputAttribute seems to have a limit at this level - const int MAX_BYTES = 1024 * 16; - int ReadBufferSize = MAX_BYTES - 32; + static const int ReadBufferSize = MAX_BYTES - 32; + DWORD cAttrRead = ReadBufferSize; DWORD BytesRead = 0; - int i = 0; - int LastAttrRead = 0; while (BytesRead < BufferSize) { - Str.push_back(new char[MAX_BYTES]); - if (!ReadConsoleOutputCharacter(hConsole, Str[i], ReadBufferSize, coordScreen, &cCharsRead)) + Str.resize(Str.size() + 1); + if (!ReadConsoleOutputCharacter(hConsole, Str.back().data(), ReadBufferSize, coordScreen, &cCharsRead)) SLog += StringFromFormat("WriteConsoleOutputCharacter error"); - Attr.push_back(new WORD[MAX_BYTES]); - if (!ReadConsoleOutputAttribute(hConsole, Attr[i], ReadBufferSize, coordScreen, &cAttrRead)) + + Attr.resize(Attr.size() + 1); + if (!ReadConsoleOutputAttribute(hConsole, Attr.back().data(), ReadBufferSize, coordScreen, &cAttrRead)) SLog += StringFromFormat("WriteConsoleOutputAttribute error"); // Break on error if (cAttrRead == 0) break; BytesRead += cAttrRead; - i++; coordScreen = GetCoordinates(BytesRead, ConInfo.dwSize.X); - LastAttrRead = cAttrRead; } // Letter space int LWidth = (int)(floor((float)Width / 8.0f) - 1.0f); @@ -232,16 +233,16 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool DWORD cAttrWritten = 0; for (size_t i = 0; i < Attr.size(); i++) { - if (!WriteConsoleOutputCharacter(hConsole, Str[i], ReadBufferSize, coordScreen, &cCharsWritten)) + if (!WriteConsoleOutputCharacter(hConsole, Str[i].data(), ReadBufferSize, coordScreen, &cCharsWritten)) SLog += StringFromFormat("WriteConsoleOutputCharacter error"); - if (!WriteConsoleOutputAttribute(hConsole, Attr[i], ReadBufferSize, coordScreen, &cAttrWritten)) + if (!WriteConsoleOutputAttribute(hConsole, Attr[i].data(), ReadBufferSize, coordScreen, &cAttrWritten)) SLog += StringFromFormat("WriteConsoleOutputAttribute error"); BytesWritten += cAttrWritten; coordScreen = GetCoordinates(BytesWritten, LBufWidth); } - int OldCursor = ConInfo.dwCursorPosition.Y * ConInfo.dwSize.X + ConInfo.dwCursorPosition.X; + const int OldCursor = ConInfo.dwCursorPosition.Y * ConInfo.dwSize.X + ConInfo.dwCursorPosition.X; COORD Coo = GetCoordinates(OldCursor, LBufWidth); SetConsoleCursorPosition(hConsole, Coo); diff --git a/Source/Core/Common/Src/FileUtil.cpp b/Source/Core/Common/Src/FileUtil.cpp index 969ba9f948..bbfc03f2fa 100644 --- a/Source/Core/Common/Src/FileUtil.cpp +++ b/Source/Core/Common/Src/FileUtil.cpp @@ -677,7 +677,7 @@ bool WriteStringToFile(bool text_file, const std::string &str, const char *filen if (!f) return false; size_t len = str.size(); - if (len != fwrite(str.data(), 1, str.size(), f)) + if (len != fwrite(str.data(), 1, str.size(), f)) // TODO: string::data() may not be contiguous { fclose(f); return false; diff --git a/Source/Core/Core/Src/DSP/DSPEmitter.cpp b/Source/Core/Core/Src/DSP/DSPEmitter.cpp index 571276ef33..20f0079c66 100644 --- a/Source/Core/Core/Src/DSP/DSPEmitter.cpp +++ b/Source/Core/Core/Src/DSP/DSPEmitter.cpp @@ -41,7 +41,6 @@ DSPEmitter::DSPEmitter() : gpr(*this), storeIndex(-1), storeIndex2(-1) blocks = new DSPCompiledCode[MAX_BLOCKS]; blockLinks = new Block[MAX_BLOCKS]; blockSize = new u16[MAX_BLOCKS]; - unresolvedJumps = new std::list[MAX_BLOCKS]; compileSR = 0; compileSR |= SR_INT_ENABLE; diff --git a/Source/Core/Core/Src/DSP/DSPEmitter.h b/Source/Core/Core/Src/DSP/DSPEmitter.h index 6c6b97b9c7..fc51e1d376 100644 --- a/Source/Core/Core/Src/DSP/DSPEmitter.h +++ b/Source/Core/Core/Src/DSP/DSPEmitter.h @@ -260,7 +260,7 @@ public: u16 startAddr; Block *blockLinks; u16 *blockSize; - std::list *unresolvedJumps; + std::list unresolvedJumps[MAX_BLOCKS]; DSPJitRegCache gpr; private: diff --git a/Source/Core/Core/Src/DSPEmulator.h b/Source/Core/Core/Src/DSPEmulator.h index 34ebe83252..657185a13d 100644 --- a/Source/Core/Core/Src/DSPEmulator.h +++ b/Source/Core/Core/Src/DSPEmulator.h @@ -18,8 +18,8 @@ #ifndef _DSPEMULATOR_H_ #define _DSPEMULATOR_H_ - #include "ChunkFile.h" +#include "SoundStream.h" class DSPEmulator { @@ -43,6 +43,9 @@ public: virtual void DSP_Update(int cycles) = 0; virtual void DSP_StopSoundStream() = 0; virtual void DSP_ClearAudioBuffer(bool mute) = 0; + +protected: + SoundStream *soundStream; }; DSPEmulator *CreateDSPEmulator(bool LLE); diff --git a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h index 8abd6c0358..7b5d6f1eb5 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h +++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h @@ -61,7 +61,6 @@ private: bool m_bWii; bool m_InitMixer; - SoundStream *soundStream; // Fake mailbox utility struct DSPState diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h index 7df273503e..5fff3d423b 100644 --- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h +++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h @@ -48,7 +48,6 @@ private: static void dsp_thread(DSPLLE* lpParameter); std::thread m_hDSPThread; - SoundStream *soundStream; bool m_InitMixer; void *m_hWnd; bool m_bWii; diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp index 4f4125c8dc..8096adb36a 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp @@ -117,25 +117,21 @@ bool CWII_IPC_HLE_Device_di::IOCtlV(u32 _CommandAddress) _dbg_assert_msg_(WII_IPC_DVD, CommandBuffer.InBuffer[1].m_Address == 0, "DVDLowOpenPartition with ticket"); _dbg_assert_msg_(WII_IPC_DVD, CommandBuffer.InBuffer[2].m_Address == 0, "DVDLowOpenPartition with cert chain"); - bool readOK = false; - // Get TMD offset for requested partition... - u64 TMDOffset = ((u64)Memory::Read_U32(CommandBuffer.InBuffer[0].m_Address + 4) << 2 ) + 0x2c0; + u64 const TMDOffset = ((u64)Memory::Read_U32(CommandBuffer.InBuffer[0].m_Address + 4) << 2 ) + 0x2c0; INFO_LOG(WII_IPC_DVD, "DVDLowOpenPartition: TMDOffset 0x%016llx", TMDOffset); - u32 TMDsz = 0x208; //CommandBuffer.PayloadBuffer[0].m_Size; - u8 *pTMD = new u8[TMDsz]; - if (pTMD) - { - // Read TMD to the buffer - VolumeHandler::RAWReadToPtr(pTMD, TMDOffset, TMDsz); + static u32 const TMDsz = 0x208; //CommandBuffer.PayloadBuffer[0].m_Size; + u8 pTMD[TMDsz]; - memcpy(Memory::GetPointer(CommandBuffer.PayloadBuffer[0].m_Address), pTMD, TMDsz); - readOK |= true; - WII_IPC_HLE_Interface::ES_DIVerify(pTMD, TMDsz); - } - ReturnValue = readOK ? 1 : 0; + // Read TMD to the buffer + VolumeHandler::RAWReadToPtr(pTMD, TMDOffset, TMDsz); + + memcpy(Memory::GetPointer(CommandBuffer.PayloadBuffer[0].m_Address), pTMD, TMDsz); + WII_IPC_HLE_Interface::ES_DIVerify(pTMD, TMDsz); + + ReturnValue = 1; } break; diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h index ef08a068ce..1ebc77b1b5 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h @@ -164,7 +164,7 @@ private: ACLQ(const u8* data, const size_t size, const u16 conn_handle) : m_size(size), m_conn_handle(conn_handle) { - m_buffer = new u8[m_size]; + m_buffer = new u8[m_size]; // TODO: memleak memcpy(m_buffer, data, m_size); } }; diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.cpp b/Source/Core/DolphinWX/Src/GameListCtrl.cpp index 6d4a8d15d3..e6da681b45 100644 --- a/Source/Core/DolphinWX/Src/GameListCtrl.cpp +++ b/Source/Core/DolphinWX/Src/GameListCtrl.cpp @@ -147,6 +147,12 @@ CGameListCtrl::~CGameListCtrl() { if (m_imageListSmall) delete m_imageListSmall; + + while (!m_ISOFiles.empty()) // so lazy + { + delete m_ISOFiles.back(); + m_ISOFiles.pop_back(); + } } void CGameListCtrl::InitBitmaps() @@ -276,7 +282,7 @@ void CGameListCtrl::Update() for (int i = 0; i < (int)m_ISOFiles.size(); i++) { InsertItemInReportView(i); - if (m_ISOFiles[i].IsCompressed()) + if (m_ISOFiles[i]->IsCompressed()) SetItemTextColour(i, wxColour(0xFF0000)); } @@ -375,7 +381,7 @@ void CGameListCtrl::OnPaintDrawImages(wxPaintEvent& event) if (GetItemRect(i, itemRect)) { int itemY = itemRect.GetTop(); - const GameListItem& rISOFile = m_ISOFiles[GetItemData(i)]; + const GameListItem& rISOFile = *m_ISOFiles[GetItemData(i)]; m_imageListSmall->Draw(m_PlatformImageIndex[rISOFile.GetPlatform()], dc, itemRect.GetX()+3, itemY); @@ -415,7 +421,7 @@ void CGameListCtrl::InsertItemInReportView(long _Index) wxCSConv SJISConv(wxFontMapper::GetEncodingName(wxFONTENCODING_EUC_JP)); #endif - GameListItem& rISOFile = m_ISOFiles[_Index]; + GameListItem& rISOFile = *m_ISOFiles[_Index]; m_gamePath.append(rISOFile.GetFileName() + '\n'); // Insert a first row with the platform image, that will be used as the Index @@ -612,7 +618,9 @@ void CGameListCtrl::ScanForISOs() if (!Cont) break; - GameListItem ISOFile(rFilenames[i]); + GameListItem* const iso_file = new GameListItem(rFilenames[i]); + const GameListItem& ISOFile = *iso_file; + if (ISOFile.IsValid()) { bool list = true; @@ -665,21 +673,21 @@ void CGameListCtrl::ScanForISOs() } if (list) - m_ISOFiles.push_back(ISOFile); + m_ISOFiles.push_back(iso_file); } } } if (SConfig::GetInstance().m_ListDrives) { - std::vector drives = cdio_get_devices(); - GameListItem * Drive[24]; - // Another silly Windows limitation of 24 drive letters - for (u32 i = 0; i < drives.size() && i < 24; i++) + const std::vector drives = cdio_get_devices(); + + for (std::vector::const_iterator iter = drives.begin(); iter != drives.end(); ++iter) { - Drive[i] = new GameListItem(drives[i].c_str()); - if (Drive[i]->IsValid()) - m_ISOFiles.push_back(*Drive[i]); + std::auto_ptr gli(new GameListItem(*iter)); + + if (gli->IsValid()) + m_ISOFiles.push_back(gli.release()); } } @@ -692,10 +700,12 @@ void CGameListCtrl::OnColBeginDrag(wxListEvent& event) event.Veto(); } -const GameListItem *CGameListCtrl::GetISO(int index) const +const GameListItem *CGameListCtrl::GetISO(size_t index) const { - if (index >= (int)m_ISOFiles.size()) return NULL; - return &m_ISOFiles[index]; + if (index < m_ISOFiles.size()) + return m_ISOFiles[index]; + else + return NULL; } CGameListCtrl *caller; @@ -906,7 +916,7 @@ void CGameListCtrl::OnMouseMotion(wxMouseEvent& event) return; } - const GameListItem& rISO = m_ISOFiles[GetItemData(item)]; + const GameListItem& rISO = *m_ISOFiles[GetItemData(item)]; IniFile ini; ini.Load(File::GetUserPath(D_GAMECONFIG_IDX) + rISO.GetUniqueID() + ".ini"); @@ -1061,7 +1071,7 @@ const GameListItem * CGameListCtrl::GetSelectedISO() if (GetSelectedItemCount() > 1) SetItemState(item, 0, wxLIST_STATE_SELECTED); - return &m_ISOFiles[GetItemData(item)]; + return m_ISOFiles[GetItemData(item)]; } } } diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.h b/Source/Core/DolphinWX/Src/GameListCtrl.h index 8a9a993140..84f4c5e284 100644 --- a/Source/Core/DolphinWX/Src/GameListCtrl.h +++ b/Source/Core/DolphinWX/Src/GameListCtrl.h @@ -52,7 +52,7 @@ public: void BrowseForDirectory(); const GameListItem *GetSelectedISO(); - const GameListItem *GetISO(int index) const; + const GameListItem *GetISO(size_t index) const; enum { @@ -71,7 +71,7 @@ private: std::vector m_FlagImageIndex; std::vector m_PlatformImageIndex; std::vector m_EmuStateImageIndex; - std::vector m_ISOFiles; + std::vector m_ISOFiles; // NetPlay string for the gamelist std::string m_gameList; diff --git a/Source/Core/DolphinWX/Src/ISOFile.cpp b/Source/Core/DolphinWX/Src/ISOFile.cpp index 18c18cd478..8af27a432d 100644 --- a/Source/Core/DolphinWX/Src/ISOFile.cpp +++ b/Source/Core/DolphinWX/Src/ISOFile.cpp @@ -47,8 +47,6 @@ GameListItem::GameListItem(const std::string& _rFileName) , m_FileSize(0) , m_Valid(false) , m_BlobCompressed(false) - , m_pImage(NULL) - , m_ImageSize(0) { if (LoadFromCache()) { @@ -100,9 +98,8 @@ GameListItem::GameListItem(const std::string& _rFileName) pBannerLoader->GetDescription(m_Description); if (pBannerLoader->GetBanner(g_ImageTemp)) { - m_ImageSize = DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT * 3; - //use malloc(), since wxImage::Create below calls free() afterwards. - m_pImage = (u8*)malloc(m_ImageSize); + // resize vector to image size + m_pImage.resize(DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT * 3); for (size_t i = 0; i < DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT; i++) { @@ -124,14 +121,14 @@ GameListItem::GameListItem(const std::string& _rFileName) // If not Gamecube, create a cache file only if we have an image. // Wii isos create their images after you have generated the first savegame - if (m_Platform == GAMECUBE_DISC || m_pImage) + if (m_Platform == GAMECUBE_DISC || !m_pImage.empty()) SaveToCache(); } } - if (m_pImage) + if (!m_pImage.empty()) { - m_Image.Create(DVD_BANNER_WIDTH, DVD_BANNER_HEIGHT, m_pImage); + m_Image.Create(DVD_BANNER_WIDTH, DVD_BANNER_HEIGHT, &m_pImage[0], true); } else { @@ -173,7 +170,7 @@ void GameListItem::DoState(PointerWrap &p) p.Do(m_VolumeSize); p.Do(m_Country); p.Do(m_BlobCompressed); - p.DoBuffer(&m_pImage, m_ImageSize); + p.Do(m_pImage); p.Do(m_Platform); } diff --git a/Source/Core/DolphinWX/Src/ISOFile.h b/Source/Core/DolphinWX/Src/ISOFile.h index 80ff0096d1..7392a4fcf1 100644 --- a/Source/Core/DolphinWX/Src/ISOFile.h +++ b/Source/Core/DolphinWX/Src/ISOFile.h @@ -26,7 +26,7 @@ #endif class PointerWrap; -class GameListItem +class GameListItem : NonCopyable { public: GameListItem(const std::string& _rFileName); @@ -78,7 +78,7 @@ private: #endif bool m_Valid; bool m_BlobCompressed; - u8* m_pImage; + std::vector m_pImage; u32 m_ImageSize; bool LoadFromCache(); diff --git a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp index b738d5aabb..a995ae415a 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp @@ -447,7 +447,7 @@ ControllerInterface::Device* ControllerInterface::FindDevice(const ControllerInt ControllerInterface::Device::Control* ControllerInterface::InputReference::Detect(const unsigned int ms, Device* const device) { unsigned int time = 0; - bool* const states = new bool[device->Inputs().size()]; + std::vector states(device->Inputs().size()); if (device->Inputs().size() == 0) return NULL; @@ -457,14 +457,14 @@ ControllerInterface::Device::Control* ControllerInterface::InputReference::Detec std::vector::const_iterator i = device->Inputs().begin(), e = device->Inputs().end(); - for (bool* state=states; i != e; ++i) + for (std::vector::iterator state = states.begin(); i != e; ++i) *state++ = ((*i)->GetState() > INPUT_DETECT_THRESHOLD); while (time < ms) { device->UpdateInput(); i = device->Inputs().begin(); - for (bool* state=states; i != e; ++i,++state) + for (std::vector::iterator state = states.begin(); i != e; ++i,++state) { // detected an input if ((*i)->IsDetectable() && (*i)->GetState() > INPUT_DETECT_THRESHOLD) @@ -480,8 +480,6 @@ ControllerInterface::Device::Control* ControllerInterface::InputReference::Detec Common::SleepCurrentThread(10); time += 10; } - delete[] states; - // no input was detected return NULL; } diff --git a/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp b/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp index 73d9976f5b..1af47f5a4c 100644 --- a/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp +++ b/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp @@ -114,7 +114,7 @@ void TexDecoder_OpenCL_Initialize() else { binary_size = input.GetSize(); - header = new char[HEADER_SIZE]; + header = new char[HEADER_SIZE]; // TODO: memleak possible binary = new char[binary_size]; input.ReadBytes(header, HEADER_SIZE); input.ReadBytes(binary, binary_size); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 1b98404a33..47a5058da9 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -1571,7 +1571,7 @@ bool Renderer::SaveScreenshot(const std::string &filename, const TargetRectangle { u32 W = back_rc.GetWidth(); u32 H = back_rc.GetHeight(); - u8 *data = new u8[3 * W * H]; + u8 *data = new u8[3 * W * H]; // TODO: possible memleak, and new'd data is given to wxImage which requires malloc glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPixels(back_rc.left, back_rc.bottom, W, H, GL_RGB, GL_UNSIGNED_BYTE, data);