我正在用C ++练习内存分配和磁盘管理。我只是所有的工作......看起来似乎有点太容易了。我不确定我的指针和我的分配和解除分配是否正确。我的Total FreeSpace看起来会起作用,但看起来太基础了。我只需要某人的编程经验。当我尝试运行此代码时,它会给我一些错误。
请不要添加任何新的全局变量。
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;
}
答案 0 :(得分: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' 但发布完整的模块,我可以帮助你更多,也许解释一些事情。
答案 1 :(得分:0)
如果不讨论代码的其他方面(例如内存泄漏等),您最有可能的错误来自*int_pointer = 0xDEADBEEF;
行。 int_pointer
等于0
,因为int_pointer = (long *)allocate(sizeof(long));
和void* allocate(int size)
及其return ((void*) 0);
始终返回0
。所以你得到了这个例外:尝试在地址0xDEADBEEF
写0x00000000
,这是一个禁止的操作(在低地址有一些特定于操作系统的东西)。