程序终止时堆坏了

时间:2014-11-17 06:53:16

标签: c++ arrays memory-management dynamic heap-corruption

我无法弄清楚造成这种内存泄漏的原因(我假设发生了什么事情。)

我有几个课程,所以我会发布每个课程的构造函数和析构函数。错误消息表明损坏是由stock.cpp(20)分配的内存引起的,这是行

symbol(new char[]),

构造函数和析构函数如下

hashmap.cpp

HashMap::HashMap(int capacity) :
  slots(new Slot[capacity]), 
  capacity(capacity), 
  nStocks(0),
  isEmpty(true)

HashMap::~HashMap(void)
{
    delete[] slots;
}

stock.cpp

Stock::Stock(char const * const symbol, char const * const name, int sharePrice, Date priceDate):
  symbol(new char[strlen(symbol)+1]),
  name(new char[strlen(name) + 1]),
  sharePrice(sharePrice),
  priceDate(priceDate),
  isEmpty(false)
{
  strcpy(this->symbol, symbol);
  strcpy(this->name, name);
}

Stock::Stock(void) :
  symbol(new char[]),  //this is where the memory allocation that causes the error occurs
  name(new char[]),
  isEmpty(true)

Stock::~Stock(void)
{
  delete[] symbol;
  delete[] name;
}

如您所见,在调用析构函数时,将销毁在stock.cpp(20)中分配的数组。那是怎么回事?

编辑:这是完整的错误消息

调试错误!

程序:asnmt03 / Debug / asnmt03.ext

HEAP CORRUPTION DETECTED:在0x004E51F8的正常块(#168)之后 CRT检测到应用程序在堆缓冲区结束后写入内存

在stock.cpp分配的内存(20)

0 个答案:

没有答案