Я, наверное, должен спать.Вместо этого я кодирую.В частности, я написал «Распределитель памяти худшего в мире».У него есть массив байтов (символов), чтобы использовать его для памяти;у него есть список используемых блоков памяти;у него есть индекс для выделения памяти.Он даже выделяет память.Распределяет, не так много.
Это не должно быть проблемой, хотя, насколько мне известно, ничего нового не существует вне классов массива и списка, и деструктор для них называется правильным числомраз.
Редактировать: Проблема в том, что программа входит в то, что кажется бесконечным циклом где-то в самом внутреннем коде c ++, вскоре после вызова деструктора MemoryManager.Фактически, если MemoryManager находится внутри блока Try-Catch, программа никогда не выходит за пределы блока Try-Catch.Мне нужно знать, почему и как это исправить, пожалуйста, спасибо.
Это основной цикл, который делает ужасно важные распределения:
int _tmain(int argc, _TCHAR* argv[])
{
MemoryManager memoryManager = MemoryManager(1024);
try
{
int * n;
for (int t = 0; t < 32; ++t)
{
n = (int*)memoryManager.Allocate(4);
}
} catch (char* str) { std::cout << str; }
return 0;
}
И MemoryManager, во всем, это новичокслава:
// A memory manager
#pragma once
#include "stdafx.h"
#include "Array.h"
#include "SmartPointer.h"
class MemBlock
{
public:
unsigned int Start;
unsigned int End;
MemBlock() { Start = 0; End = 0; }
MemBlock(unsigned int start, unsigned int end)
{
Start = start; End = end;
}
~MemBlock() { }
};
class MemoryManager
{
private:
Array<char> memory;
List<MemBlock> memBlocks;
int index;
public:
MemoryManager(unsigned int size)
{
memory = Array<char>(size);
memBlocks = List<MemBlock>(size / 24);
index = 0;
}
~MemoryManager() { }
void* Allocate(unsigned int size)
{
memBlocks.Add(&MemBlock(index, index + size));
void* r = (void*)(memory.insecureAccess + index);
index += size;
return r;
}
};
Спасибо.