C ++内存分配/释放& FreeSpace Bug错误

时间:2016-06-02 05:15:39

标签: c++ memory-management allocation

我正在用C ++练习内存分配和磁盘管理。我只是所有的工作......看起来似乎有点太容易了。我不确定我的指针和我的分配和解除分配是否正确。我的Total 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;
}

2 个答案:

答案 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。所以你得到了这个例外:尝试在地址0xDEADBEEF0x00000000,这是一个禁止的操作(在低地址有一些特定于操作系统的东西)。