如何阻止调整大小函数导致 _BLOCK_TYPE_IS_VALID(pHead -> nBlockUse)?

How do I stop my resize function from causing _BLOCK_TYPE_IS_VALID(pHead -> nBlockUse)?

我的任务是使用数组实现堆栈但是,当我运行程序时它说_BLOCK_TYPE_IS_VALID(pHead -> nBlockUse) .调试器将我定向到调整大小函数中的删除语句,但我不确定如何解决该问题。

注意:我试图在不使用向量的情况下这样做。

   void resize(){
       Type* temp = new Type[asz + 2];  // store old values
       for (int i = 0; i < asz; ++i){ temp[i] = arr[i]; }
       delete[asz] arr;             // delete old array
       arr = temp;                  // keep new larger arr
       delete[] temp;
       asz =+2; // array size
       }

这里有一些更改可能会解决您的问题。您没有初始化 sz,您的最终 for 循环是根据新增加的大小进行复制,但 temp 只是旧大小。您似乎也没有在任何地方设置新的 sz。可能是其中的任何一个或所有这些导致内存覆盖使调试块无效并导致您看到的断言。

  void resize(Type& arg){
       Type* temp = new Type[arg.sz];   // store old values
       for (int i = 0; i < arg.sz; ++i){ temp[i] = arg[i]; }
       int oldSz = arg.sz, newSz=arg.sz + 2;
       delete[] arg;                // delete old array
       arg = new Type[newSz];          // create new larger arr
       arg.sz = newSz;
       for (int i = 0; i < oldSz; ++i){ arg[i] = temp[i]; } //copy back
       delete[] temp;
       }