我这里有点小问题。每次我运行下面的代码,我的程序就会崩溃。
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);
}
}
}stack、stackp和stacks的定义如下:
stacks = 8;
stackp = 0;
stack = new byte[stacks];而byte只是一个unsigned char。
发布于 2012-02-01 04:37:32
不允许在使用new分配的指针上使用realloc()。
也许可以试试下面这样的代码,而不是realloc()
byte* tmp = new byte[stacks];
delete [] stack;
stack = tmp;发布于 2012-02-01 04:37:36
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);
}
}
}发布于 2012-02-01 04:38:41
不能将使用new T[n]分配的指针用作realloc()的参数。使用realloc()的指针必须来自malloc()系列函数(malloc()、calloc()或realloc())。就我个人而言,我不会使用这些,而是使用std::vector<T>。
https://stackoverflow.com/questions/9086548
复制相似问题