2016-06-02 4 views
-2

Я занимаюсь распределением памяти и управлением дисками с помощью C++. Я просто все работаю .. он просто выглядит и кажется слишком легким. Я не уверен, что мой указатель, мои ассигнования и освобождение от должности верны. Моя Total FreeSpace выглядит так, как будто она будет работать, но она выглядит слишком простой. Мне просто нужен чей-то опыт программирования. Когда я пытаюсь запустить этот код, он дает мне некоторую ошибку.C++ Memory Allocation/Deallocation & FreeSpace Ошибка ошибки

Bug Error

Пожалуйста, не добавляйте новую глобальную переменную.

const int MMSIZE = 60136; 
    char MM[MMIZE]; 

//** Initialize set up any data needed to manage the memory 
void initializeMemory(void) 
{ 
    //**increments through the POOL_SIZE 
    for (int a = 0; a < MMSIZE; a++) { 
     MM[a] = 'NULL'; 
    } 
} 

// return a pointer inside the memory 
// If no chunk can accommodate aSize call onOutOfMemory() 
void* allocate(int size) 
{ 
    //******NOT SURE******* 
    int *p = new int; 
    *p = 5; 

return ((void*) 0); 
} 

// Free up a chunk previously allocated 
void deallocate(void* mPointer) 
{ 

//******NOT SURE******* 
    int *p = new int; 
    delete p; 
    p = 0; 
    p = new int(10); 

} 

//Scan the memory and return the total free space remaining 
int remaining(void) 
{ 
//******NOT SURE******* 
    int free = 0; 
    for (int a = 0; a < MMSIZE; a++) 
    { 
     if (MM[a] < MMSIZE) 
     { 
      free += a; 
     } 
    } 

    int free2 = free - MMSIZE; 
return free2; 
} 
+3

Почему, по-вашему, этот код делает что-нибудь полезное? – immibis

+1

Я не думаю, что OP утверждает, что это похоже на то, что OP практикует и экспериментирует с распределением памяти. – rrauenza

+0

Я не знаю, какой компилятор вы используете, но он не компилируется под g ++. 'MM [a] = 'NULL';' недействителен. Также не является 'char MM [MMIZE];'. Пожалуйста, отправьте код, который действительно компилируется. У вас также нет 'main()'. – rrauenza

ответ

0

Этот код выглядит незавершенным даже для образца, но

//** Initialize set up any data needed to manage the memory 
void initializeMemory(void) 
{ 
    //**increments through the POOL_SIZE 
    for (int a = 0; a < MMSIZE; a++) { 
     MM[a] = 'NULL';// <=== this should not even compile as the single quote should only take one character like '\x0' or 'N' 
    } 
} 

не должен даже скомпилировать в качестве единственной цитаты следует принимать только один символ, как «\ x0» или «N» но выкладывает полный модуль, и я могу помочь вам больше и, возможно, объяснить несколько вещей.

+0

Добавлено в мой файл main.cpp – CloudNightOwl

+0

Это многосимвольный литерал, имеет тип 'int' и значение, определяемое реализацией. Таким образом, это дает * многосимвольное символьное постоянное * и * неявное постоянное переполнение переполнения * предупреждения, но компилируется. – lapk

0

Без обсуждения других аспектов вашего кода (например, утечки памяти и т. Д.) Конкретная ошибка, которую вы получаете, скорее всего, исходит от . int_pointer равен 0, потому что int_pointer = (long *)allocate(sizeof(long)); и ваш void* allocate(int size) с его return ((void*) 0); всегда возвращает 0. Таким образом, вы получаете именно это исключение: пытаетесь написать 0xDEADBEEF по адресу 0x00000000, что является запрещенной операцией (на низких адресах имеется конкретный материал ОС).

 Смежные вопросы

  • Нет связанных вопросов^_^