我在这里遇到一些问题。 每次我运行下面的代码时,我的程序都会崩溃。
void Wingcod::push(byte b)
{
stack[stackp] = b;
stackp++;
if(stackp >= stacks)
{
stacks += 16;
try
{
realloc(stack,stacks);
}catch(bad_alloc*)
{
cerr << "STACK OVERFLOW";
exit(1);
}
}
}
堆栈,堆栈和堆栈的定义如下:
stacks = 8;
stackp = 0;
stack = new byte[stacks];
字节只是unsigned char
。
答案 0 :(得分:6)
您不能在使用realloc()
分配的指针上使用new
。
也许尝试使用以下内容代替realloc()
:
byte* tmp = new byte[stacks];
delete [] stack;
stack = tmp;
答案 1 :(得分:4)
realloc
不会抛出异常,因为它与new
无关,而与C malloc
无关。它也没有设置指针。
stacks = 8;
stackp = 0;
stack = static_cast<byte*>(malloc(stacks * sizeof(byte)));
void Wingcod::push(byte b)
{
stack[stackp] = b;
stackp++;
if(stackp >= stacks)
{
stacks += 16;
if(!(stack = static_cast<byte*>(realloc(stack,stacks * sizeof(byte))))) {
cerr << "STACK OVERFLOW";
exit(1);
}
}
}
答案 2 :(得分:4)
您不能将使用new T[n]
分配的指针用作realloc()
的参数。使用realloc()
的指针必须来自malloc()
函数族(malloc()
,calloc()
或realloc()
)。就个人而言,我不会使用任何此类内容,而是使用std::vector<T>
。
答案 3 :(得分:0)
从here开始,Realloc仅适用于指向以前由alloc分配的内存的指针。尝试使用malloc