2016-06-02 9 views
-2

Ich übe Speicherzuweisung und Disk-Management mit C++. Ich habe nur die ganze Arbeit .. es sieht einfach aus und scheint ein bisschen zu einfach zu sein. Ich bin nicht sicher, ob mein Zeiger und meine Zuordnung und Deallocations korrekt sind. Mein Total FreeSpace sieht so aus, als würde es funktionieren, aber es sieht zu einfach aus. Ich brauche nur jemandes Programmiererfahrung. Wenn ich versuche, diesen Code auszuführen, gibt es mir eine Art von Fehler.C++ Speicher Zuweisung/Freigabe und FreeSpace Bug Fehler

Bug Error

Bitte fügen Sie keine neue globale Variable.

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

Warum glauben Sie, dass dieser Code etwas Nützliches bewirkt? – immibis

+1

Ich glaube nicht, dass OP solche Behauptungen hat - es sieht so aus, als würde OP mit der Speicherzuweisung experimentieren und experimentieren. – rrauenza

+0

Ich weiß nicht, welchen Compiler Sie verwenden, aber es kompiliert nicht unter g ++. 'MM [a] = 'NULL';' ist nicht gültig. Weder ist 'char MM [MMIZE];'. Bitte schreiben Sie Code, der tatsächlich kompiliert wird. Sie haben auch keine 'main()'. – rrauenza

Antwort

0

Dieser Code unvollendet sieht auch nur eine Probe aber

//** 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' 
    } 
} 

sollte nicht einmal als Apostroph kompilieren nur ein Zeichen wie ‚\ x0‘ nehmen sollte oder ‚N‘ aber schreiben Sie die komplette Modul und ich kann dir mehr helfen und vielleicht ein paar Dinge erklären.

+0

Hinzugefügt in meiner main.cpp Datei – CloudNightOwl

+0

Es ist ein mehrstelliges Literal, hat den Typ 'int' und einen implementierungsdefinierten Wert. Also gibt es * multi-character character constant * und * implizite Conversion Overflow * Warnungen, aber kompiliert. – lapk

0

Ohne andere Aspekte Ihres Codes (wie Speicherlecks etc.) zu diskutieren, kommt der spezifische Fehler, den Sie wahrscheinlich erhalten, von *int_pointer = 0xDEADBEEF; Zeile. int_pointer ist gleich 0, weil int_pointer = (long *)allocate(sizeof(long)); und void* allocate(int size) mit seiner return ((void*) 0); immer 0 zurückgibt. Du bekommst also genau diese Ausnahme: Versuch, 0xDEADBEEF unter der Adresse 0x00000000 zu schreiben, was eine verbotene Operation ist (es gibt einige OS-spezifische Sachen bei niedrigen Adressen).