Добрый день господа, вот есть код, который корректно чистит за собой всю выделенную память, но после его работы
в таск менеджере видно, что прога отъела 14мб памяти. Не втыкаю уже второй день, почему так происходит, объясните плиз?
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <vector>
template<typename TYPE, unsigned int SIZE> class swi_array
{
public:
swi_array()
{
memset(m_list, 0, sizeof(m_list));
}
~swi_array()
{
for (unsigned int i = 0; i < SIZE; ++i)
if (m_list[i])
delete m_list[i];
}
inline TYPE* set(unsigned int index)
{
if (!m_list[index])
m_list[index] = new TYPE();
return m_list[index];
}
inline TYPE* get(unsigned int index)
{
return m_list[index];
}
inline void del(unsigned int index)
{
if (m_list[index])
{
delete m_list[index];
m_list[index] = 0;
}
}
private:
TYPE* m_list[SIZE];
};
enum index_array_size
{
IA0_SIZE = 256,
IA_SIZE = 65536,
MEM_SIZE = 4096
};
struct index_array {
unsigned char* array[IA_SIZE];
};
typedef swi_array<index_array, IA0_SIZE> array_0;
void add_block(std::vector<unsigned char*>& data)
{
static unsigned int m_size = 0;
unsigned char* buf = 0;
m_size += 15;
if (m_size > MEM_SIZE)
{
m_size = 0;
data.push_back(new unsigned char[MEM_SIZE]);
memset(data[data.size() - 1], 8, MEM_SIZE);
buf = data[data.size() - 1];
}
}
int main(int argc, char* argv[])
{
{
std::vector<unsigned char*> data;
data.push_back(new unsigned char[MEM_SIZE]);
array_0* arr = 0;
arr = new array_0();
for (unsigned long long i = 0; i < 10000000; ++i)
{
unsigned int idx_a0 = static_cast<unsigned int>((i >> 16) & 0x00000000000000FF);
unsigned int idx_ia = static_cast<unsigned int>(i & 0x000000000000FFFF);
add_block(data);
index_array* ia = arr->set(idx_a0);
ia->array[idx_ia] = 0;
}
delete arr;
for (unsigned int i = 0; i < data.size(); ++i)
delete data[i];
}
std::cout << "end" << std::endl;
while (true)
Sleep(10);
return 0;
}
А>Добрый день господа, вот есть код, который корректно чистит за собой всю выделенную память, но после его работы А>в таск менеджере видно, что прога отъела 14мб памяти.
Я понимаю что память выросла и остановилась? Если да то можно весь код завернуть в цикл и запустить. Если память будет расти значит есть лики.
А>Добрый день господа, вот есть код, который корректно чистит за собой всю выделенную память, но после его работы А>в таск менеджере видно, что прога отъела 14мб памяти. Не втыкаю уже второй день, почему так происходит, объясните плиз?
судя по тому, что вижу после прогона ликов нет. если есть сомнения, прогоните через boundscheker какой-нить